После загрузки файла в Android Firebase Storage, как получить файл загрузки Url? getDownloadUrl() не работает

В моем новом проекте Android Firebase я использовал библиотеку com.google.firebase:firebase-storage:16.0.1.

Я получаю следующую ошибку:

enter image description here

Я открыл другой проект, в котором были библиотеки firebase-storage:15.0.2 и taskSnapshot.getDownloadUrl();, которые работали над этим проектом. но после использования последней библиотеки зависимостей она не работает.

Теперь, как я могу получить URL файла?

Есть ли способ получить ссылку на скачивание файла?

Ответ 1

Я нашел 2 решения моей проблемы.

Firebase Документация Google:

//add file on Firebase and got Download Link
filePath.putFile(imageUri).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
    @Override
    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
        if (!task.isSuccessful()){
            throw task.getException();
        }
        return filePath.getDownloadUrl();
    }
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
        if (task.isSuccessful()){
            Uri downUri = task.getResult();
            Log.d(TAG, "onComplete: Url: "+ downUri.toString());
        }
    }
});

Другое решение!

Это проще и мал, чем документация Google Firebase, и я буду использовать его:

filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Log.d(TAG, "onSuccess: uri= "+ uri.toString());
            }
        });
    }
});

Ответ 2

Этот метод устарел в версии 16.0.1 (отметьте заметки о выпуске Firebase), поэтому вам нужно использовать

StorageReference.getDownloadUrl()

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

Ответ 3

вот как я получаю ссылку для скачивания в Kotlin Android.

 ref.putFile(filePath!!)
            .addOnSuccessListener {
            val result = it.metadata!!.reference!!.downloadUrl;
            result.addOnSuccessListener {

               val imageLink = it.toString()


            }
        }

Ответ 4

taskSnapshot.getDownloadUrl() устарела, поэтому я рекомендую, чтобы в вашем методе addOnSuccessListener() вы использовали ваш storageReference и вызывали метод getDownloadUrl(), чтобы получить URL-адрес файла и делать с ним все, что захотите. Надеюсь, поможет.

         mUploadTask = storageRef.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                // get the image Url of the file uploaded
                storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        // getting image uri and converting into string
                        Uri downloadUrl = uri;
                       fileUrl = downloadUrl.toString();


                    }
                });

            }
        });

Ответ 5

Firebase обновил свой метод, поэтому, пожалуйста, обновите себя, используйте этот метод:

это основная строка, в которой вы чувствуете себя раздражающим, очень просто, просто найдите путь загрузки таким образом

 StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());
  UploadTask  uploadTask = ref.putFile(filePath);
  Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot,
         Task<Uri>>() {
   @Override
   public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
     if (!task.isSuccessful()) {
       throw task.getException();
     }

                                                              // Continue with the task to get the download URL
     return ref.getDownloadUrl();
   }
 }).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
      if (task.isSuccessful()) {
        Uri downloadUri = task.getResult();


    ///here is your image url enjoy this 

          Toast.makeText(CloudStorageActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();

        }


      } else {


        // Handle failures
        // ...
      }
    }
  });