【问题标题】:I have a problem to get video download url after upload to Firebase Cloud Storage in Android. getDownloadUrl is not working [duplicate]在 Android 中上传到 Firebase Cloud Storage 后,我无法获取视频下载 url。 getDownloadUrl 不起作用[重复]
【发布时间】:2020-07-09 00:59:01
【问题描述】:

我需要这个:

我可以成功地将视频文件上传到 Firebase 存储,但我没有获得下载网址。这是我的上传代码:

 Task<Uri> uriTask = 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();
                downloadurl = mStorageRef.getDownloadUrl().toString();
                return mStorageRef.child(name1).getDownloadUrl();
            }
     }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {

                if(task.isSuccessful())
                   downloadurl = task.getResult().toString();

                   Map<String,Object> user = new HashMap<>();
                   user.put("videoname",name1);
                   user.put("videolink",downloadurl);
                   firebaseFirestore.collection("videos").document(userID).collection("video").document().set(user).addOnSuccessListener(new OnSuccessListener<Void>() {
                     @Override
                     public void onSuccess(Void aVoid) {
                          Toast.makeText(getActivity(),"Uploaded Successfully",Toast.LENGTH_SHORT).show();
                          progressBar.setVisibility(View.GONE);
                      }
                    });
                   }
                 });
               }
             })

【问题讨论】:

  • mStorageRef.getDownloadUrl().toString() 在这里不起作用,因为getDownloadUrl() 返回一个任务。只有在该任务完成后,您才能获得实际的下载 URL。因此,获取下载 URL 的正确方法是向任务添加完成侦听器。见stackoverflow.com/questions/51056397/…

标签: android firebase firebase-storage


【解决方案1】:

试试这个

private Uri uri;    //global variable

当用户从手机中选择视频时,onActivityResult() set uri里面

onActivityResult(int requestCode, int resultCode, Intent data)
uri = data.getData(); 

终于拿到了下载地址

final StorageReference ref = storageReference.child("firebaseFilePath");

    ref.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    //now sUrl contains downloadURL
                    sUrl = uri.toString();

                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    }
            });


        }
    });

【讨论】:

    【解决方案2】:
    task.getStorage().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                String fileUrl = uri.toString()
            }
        });
    

    添加成功监听器以下载 url。如果你想获取 url,你必须这样做

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-02
      • 2018-11-07
      • 2020-01-29
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      相关资源
      最近更新 更多