如何获取多个图像上传到Firebase存储的下载URL

时间:2019-06-21 11:21:01

标签: android firebase google-cloud-firestore firebase-storage

我正在将两个“用户选择的”图像上载到Firebase存储中,并将它们的URL保存到Firestore,但是URL保存仅指向其中一张图片,尽管它们看起来并不相同。 还有一个类似的问题,但是关于swift的问题并不能回答我的问题,这里是该URL的URL。 get download url from multiple file upload firebase storage

我尝试使用ref.getDownloadUrl()获取下载链接,但是给出了错误的URL,tasksnapshot.getDownloadUrl()不再起作用。 我尝试阅读许多答案,但大多数问题都无法通过tasksnapshot.getDownloadUrl()方法过时。

private

这两个图像已上传,我可以在我的Firebase控制台中看到它们,但是存储在firestore中的URL都加载相同的图像,尽管它们不一样,看起来像这样,

  1. https://firebasestorage.googleapis.com/v0/b/sefnetapp-39b37.appspot.com/o/profilePics%2F1561103180500.jpg?alt=media&token=8dd5ee93-9bbc-46ee-89b9-fb5ae5b36128

  2. https://firebasestorage.googleapis.com/v0/b/sefnetapp-39b37.appspot.com/o/profilePics%2F1561103180500.jpg?alt=media&token=c153c59b-c6b3-428b-a845-3db3b19a38e3

我如何获得两个URL,它们将加载我上传的两张图片,而不仅仅是一张

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我只是意识到上传封面图像后并没有保存信息,我还在封面图像上传方法的onComplete中添加了saveInfo方法,现在它可以正常工作了。

    final StorageReference profileImageRef = FirebaseStorage.getInstance()
                .getReference(SefnetContract.PROFILE_PICS_REF + System.currentTimeMillis() + ".jpg");

        // Upload profile picture
        if (profileImageUri != null) {
            progressBar.setVisibility(View.VISIBLE);
            profileImageRef.putFile(profileImageUri).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 profileImageRef.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task) {
                    if (task.isSuccessful()) {
                        Uri downloadUri = task.getResult();
                        profileImageUrl = String.valueOf(downloadUri);
                        saveUserInfo();
                    } else {
                        Toast.makeText(EditProfile.this, "upload failed: "
                                + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                    }
                    progressBar.setVisibility(View.GONE);
                }
            });
        }
        if (coverImageUri != null) {
            // Upload cover picture
            progressBar.setVisibility(View.VISIBLE);
            profileImageRef.putFile(coverImageUri).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 profileImageRef.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task) {
                    progressBar.setVisibility(View.GONE);
                    if (task.isSuccessful()) {
                        Uri downloadCUri = task.getResult();
                        coverImageUrl = String.valueOf(downloadCUri);
                        saveUserInfo();
                        Toast.makeText(getApplicationContext(), "Cover Picture Uploaded", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(EditProfile.this, "Cover picture upload failed: "
                                + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

我仍然认为可以采用更好的方法来完成此操作,因此,如果您知道一种比此方法更好的方法,请分享。我想要一种方法,通过反复单击按钮可以阻止用户过多地初始化上传方法,谢谢