Java 在Android Firebase存储中上传文件后,如何获取文件下载Url?getDownloadUrl()不工作

Java 在Android Firebase存储中上传文件后,如何获取文件下载Url?getDownloadUrl()不工作,java,android,firebase,firebase-storage,Java,Android,Firebase,Firebase Storage,在我的新安卓firebase项目中,我使用了com.google.firebase:firebase存储:16.0.1library 我得到以下错误: 我打开了另一个包含库firebase存储的项目:15.0.2和taskSnapshot.getDownloadUrl()在该项目中起作用的代码。但在使用了最新的依赖项库之后,它就不起作用了 现在,如何获取文件URL 有没有办法获得文件下载链接?该方法在16.0.1版(检查)中已被弃用,因此您必须使用 如果你想在上传文件后得到它们,那么你必须检

在我的新安卓firebase项目中,我使用了
com.google.firebase:firebase存储:16.0.1
library

我得到以下错误:

我打开了另一个包含库
firebase存储的项目:15.0.2
taskSnapshot.getDownloadUrl()在该项目中起作用的代码。但在使用了最新的依赖项库之后,它就不起作用了

现在,如何获取文件URL


有没有办法获得文件下载链接?

该方法在16.0.1版(检查)中已被弃用,因此您必须使用


如果你想在上传文件后得到它们,那么你必须检查它们的文档。它已经更新。

我已经找到了两个解决问题的方法

:

//在Firebase上添加文件并获得下载链接
filePath.putFile(imageUri).continueWithTask(新的Continuation(){
@凌驾
公共任务(@NonNull Task Task)引发异常{
如果(!task.issusccessful()){
抛出task.getException();
}
返回filePath.getDownloadUrl();
}
}).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Uri downUri=task.getResult();
d(标记“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());
            }
        });
    }
});
filePath.putFile(imageUri).addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
filePath.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
Log.d(标记“onSuccess:uri=“+uri.toString());
}
});
}
});

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


                    }
                });

            }
        });
mUploadTask=storageRef.putFile(file).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//获取上载文件的图像Url
storageRef.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
//获取图像uri并转换为字符串
Uri downloadUrl=Uri;
fileUrl=downloadUrl.toString();
}
});
}
});

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

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

               val imageLink = it.toString()


            }
        }

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
        // ...
      }
    }
  });
storagereferef=StorageReference.child(“images/”+UUID.randomuid().toString());
UploadTask UploadTask=ref.putFile(文件路径);
Task urlTask=uploadTask.continueWithTask(新的Continuation(){
@凌驾
公共任务(@NonNull Task Task)引发异常{
如果(!task.issusccessful()){
抛出task.getException();
}
//继续执行任务以获取下载URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Uri downloadUri=task.getResult();
///这是你的图片网址,请欣赏
Toast.makeText(CloudStorageActivity.this,“上载”,Toast.LENGTH_SHORT.show();
}
}否则{
//处理故障
// ...
}
}
});

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

现在该方法在
taskSnapshot.getMetadata().getReference()中,如下所示

filePath.putFile(imageUri).addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
taskSnapshot.getMetadata().getReference().getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
//这里的用户uri
}
});
}
});

谢谢你的信息,我没有找到这个。我读了文档,这帮了我的忙。嘿,伙计,我真的很想谢谢你,因为我被困了好几天,就是找不到解决办法。我试着在这里提问,但什么都没用。砰的一声,我找到了你的答案,现在它开始工作了。我很高兴我能帮上忙。如果答案有帮助,请投票。快乐编码!
 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
        // ...
      }
    }
  });