【问题标题】:After upload a file in Android Firebase Storage how get the file download Url? getDownloadUrl() not working在 Android Firebase 存储中上传文件后如何获取文件下载 URL? getDownloadUrl() 不工作
【发布时间】:2018-11-07 07:32:42
【问题描述】:

在我的新 android firebase 项目中,我使用了 com.google.firebase:firebase-storage:16.0.1 库。

我收到以下错误:

我打开了另一个项目,该项目的库 firebase-storage:15.0.2taskSnapshot.getDownloadUrl(); 用于该项目。但是使用最新的依赖库后它不起作用。

现在,如何获取文件 URL?

有什么办法获取文件下载链接?

【问题讨论】:

    标签: java android firebase firebase-storage


    【解决方案1】:

    该方法已在版本 16.0.1 上被弃用(检查Firebase release notes)所以你必须使用

    StorageReference.getDownloadUrl()

    如果您想在上传文件后获取它们,那么您必须查看他们的文档here。已经更新了。

    【讨论】:

    • 感谢您的信息,我没有找到这个。我阅读了文档,这对我有帮助。
    【解决方案2】:

    我为我的问题找到了 2 个解决方案。

    Firebase Google Documentation

    //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());
                }
            });
        }
    });
    

    【讨论】:

      【解决方案3】:

      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();
      
      
                          }
                      });
      
                  }
              });
      

      【讨论】:

      • 嘿伙计,我真的很想感谢你,因为我完全被困了好几天,找不到解决方案。尝试在这里提问,但没有任何效果。砰,我得到了你的答案,现在它正在工作。
      • 我很高兴能帮上忙。如果答案有帮助,请点赞。编码愉快!
      【解决方案4】:

      这就是我在 kotlin android 中获取下载链接的方式。

       ref.putFile(filePath!!)
                  .addOnSuccessListener {
                  val result = it.metadata!!.reference!!.downloadUrl;
                  result.addOnSuccessListener {
      
                     val imageLink = it.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
                // ...
              }
            }
          });
        

        【讨论】:

          【解决方案6】:

          在这种情况下,最好继续使用addOnSuccessListener,但不要直接使用getDownloadUrl,您还需要添加一个监听器

          现在方法在taskSnapshot.getMetadata().getReference()里面是这样的

          filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                      @Override
                      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                           taskSnapshot.getMetadata().getReference().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                              @Override
                              public void onSuccess(Uri uri) {
                                  // User uri here
                              }
                          });
                      }
          
                  });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-12-28
            • 1970-01-01
            • 2017-07-08
            • 1970-01-01
            • 2020-01-29
            • 2020-06-28
            相关资源
            最近更新 更多