如何在最新版本中使用 getdownloadurl?

Posted

技术标签:

【中文标题】如何在最新版本中使用 getdownloadurl?【英文标题】:How to use getdownloadurl in recent versions? 【发布时间】:2018-12-05 23:20:33 【问题描述】:
                Uri downloaduri=taskSnapshot.getDownloadUrl();//here i cant use getdownloadurl() function
                DatabaseReference new_prod=db.push();
                new_prod.child("product name").setValue(prod_name);
                new_prod.child("product price").setValue(prod_price);
                new_prod.child("available stock").setValue(prod_quan);
                new_prod.child("product image").setValue(downloaduri);
                pd.dismiss();//fragments code

我无法使用getdownloadurl。我已经在firebase存储中存储了图像。是限制使用getdownloadurl的片段吗?我的动机是查询存储在 firebase 中。请帮助我。

【问题讨论】:

【参考方案1】:

在最新版本的 Firebase Storage SDK 中删除了 taskSnapshot.getDownloadUrl() 方法。您现在需要从 StorageReference 获取下载 URL。

调用StorageReference.getDownloadUrl() 会返回Task,因为它需要从服务器检索下载 URL。所以你需要一个完成监听器来获取实际的 URL。

来自documentation on downloading a file:

 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' in uri
        System.out.println(uri.toString());
    
).addOnFailureListener(new OnFailureListener() 
    @Override
    public void onFailure(@NonNull Exception exception) 
        // Handle any errors
    
);

或者,如果您在上传后立即获得下载 URL(如您的情况),则第一行可能是这样:

taskSnapshot.getStorage().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() 

另见:

Firebase Storage getDownloadUrl() method can't be resolved Error: cannot find symbol method getDownloadUrl() of type com.google.firebase.storage.UploadTask.TaskSnapshot uploading a file and getting its download URL 上的 Firebase 文档中的示例

【讨论】:

【参考方案2】:

经过数小时的研究和不同的方式,这对我有用:

filepath.putFile(resultUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() 
     @Override
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) 

           //here
           Task<Uri> urlTask = taskSnapshot.getStorage().getDownloadUrl();
           while (!urlTask.isSuccessful());
           Uri downloadUrl = urlTask.getResult();

           final String sdownload_url = String.valueOf(downloadUrl);

【讨论】:

【参考方案3】:
storageReference.child("YOUR_CHILD")
    .putFile("FILE")
    .addOnSuccessListener(new OnSuccessListener() 
       @Override
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) 
             taskSnapshot
               .getStorage()
               .getDownloadUrl()
               .addOnSuccessListener(new OnSuccessListener() 
                                @Override
                                public void onSuccess(Uri uri) 
                                    //Put your result here
                                
                            );

                      

【讨论】:

【参考方案4】:

以下方法对我有用。

    _fbs_upload_success_listener = new OnSuccessListener<UploadTask.TaskSnapshot>() 
            @Override
            public void onSuccess(UploadTask.TaskSnapshot _param1) 

                Task<Uri> urlTask = _param1.getStorage().getDownloadUrl();
                while (!urlTask.isSuccessful());
                Uri downloadUrl = urlTask.getResult();
                String _downloadUrl = downloadUrl.toString();
   ;

【讨论】:

【参考方案5】:

这是搜索 3 小时后对我有用的 Kotlin 解决方案

 val uploadTask =
        FirebaseStorage.getInstance().reference.child("images").child(imageName).putBytes(data)

    uploadTask.addOnFailureListener 
        // Handle unsuccessful uploads
        Toast.makeText(baseContext, "Failed to upload", Toast.LENGTH_LONG).show()
    .addOnSuccessListener 
        Toast.makeText(
            baseContext, "Image uploaded",
            Toast.LENGTH_LONG
        ).show()
        var downloadUrl: Uri? = null
        FirebaseStorage.getInstance().reference.child("images")
            .child(imageName).downloadUrl.addOnSuccessListener  it1 ->
            downloadUrl = it1 
          
        


    

downloadUrl 是您的网址

【讨论】:

以上是关于如何在最新版本中使用 getdownloadurl?的主要内容,如果未能解决你的问题,请参考以下文章

如何在最新版本中使用 getdownloadurl?

如何在最新版本中使用 getdownloadurl?

如何在最新版本中使用 getdownloadurl?

如何从 Firebase 存储 getDownloadURL 获取 URL

如何解决方法getDownloadUrl()

如何从 getDownloadURL() 获取 url