Загрузка файла из Firebase Storage меняет его имя

Всякий раз, когда я загружаю файл из хранилища Firebase на устройство Android, имя файла меняется, например, с filename.pdf, например, filename-13557732.pdf

Есть ли способ предотвратить это изменение? Почему это происходит?

File directory = new File(Environment.getExternalStoragePublicDirectory 
    (Environment.DIRECTORY_DOWNLOADS).getAbsolutePath());

final File localFile = File.createTempFile(filename,".pdf", directory);
mStorageReference.child(filename).getFile(localFile)

Также, случайно, есть ли способ скачать файл с URL (который у меня уже есть), а не с именем?

1 ответ

Q: Как изменить имя по умолчанию в createTempFile?

Ответ: вы не можете.

Если бы вы могли, вы бы аннулировали гарантии createTempFile, которые, согласно javadoc:

Файл, обозначенный возвращенным абстрактным путем, не существовал до того, как был вызван этот метод, и ни этот метод, ни какой-либо из его вариантов не будут возвращать тот же абстрактный путь снова в текущем вызове виртуальной машины. Если вас волнует имя файла, возможно, createTempFile() не является подходящим способом для создания файла.

Вы можете узнать, что представляет собой системный каталог временных файлов, и создать там свой собственный файл, но вам придется самостоятельно управлять возможностью конфликта имен файлов.

Альтернативная стратегия использования createTempFile зависит от того, для чего вы используете файл и почему вы заботитесь о том, как он называется, чего вы не указали.

Q: Есть ли способ скачать это, используя URL.

Ответ: да.

Есть разные способы сделать это. Проверьте эту документацию

Проще говоря.

private FirebaseStorage storageRef = FirebaseStorage.getInstance();



storageRef.child("users/me/profile.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        // Got the download URL for 'users/me/profile.png'
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle any errors
    }
});

Вы можете использовать, Пикассо или Glide. Или просто создайте свой собственный метод передачи URL. Это может сказать URI, но это действительно URL.

Другие вопросы по тегам