首页 > 解决方案 > 图片上传后如何获取图片下载地址

问题描述

我正在尝试创建应用程序 firebase 图像上传。

干草伙伴,我在获取会话的图像下载 URL 中遇到了一些问题。

我的firebase版本是:

implementation 'com.google.firebase:firebase-auth:16.0.5'
implementation 'com.google.firebase:firebase-storage:16.0.5'

我的下载 URL 获取代码是:

String profileimageurl = taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();

如何解决这个问题,我的错误是:

java.io.FileNotFoundException: /com.google.android.gms.tasks.zzu@527ce2f (No such file or directory)
I/Glide: Root cause (2 of 3)
    java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)
I/Glide: Root cause (3 of 3)
    java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)

该图像已上传到我的 Firebase 存储中,但无法访问

标签: androidfirebasefirebase-storage

解决方案


最后,

 private void uriImageUpload() {
        final StorageReference storageReference = FirebaseStorage.getInstance().getReference("myprofile/" + System.currentTimeMillis() + ".jpg");
        if (urimageurl != null) {
            storageReference.putFile(urimageurl)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            Toast.makeText(getApplicationContext(), "Image Uploaded Successfully", Toast.LENGTH_LONG).show();

                            //TODO Here is the problem
//                            profileimageurl = taskSnapshot.getDownloadUrl().toString();
                            String myprofileurl  = taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();
                            Log.d(TAG, "Profile image uploading url " + myprofileurl);

                            storageReference.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
                                @Override
                                public void onComplete(@NonNull Task<Uri> task) {
                                    profileimageurl=task.getResult().toString();
                                    Log.i("URL",profileimageurl);
                                }
                            });

                        }
                    }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(getApplicationContext(), "Image Uploading was failed", Toast.LENGTH_LONG).show();
                }
            });
        }
    }

只需添加

storageReference.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Uri> task) {
                                        profileimageurl=task.getResult().toString();
                                        Log.i("URL",profileimageurl);
                                    }
                                });

就这样。


推荐阅读