как получить URL-адреса для загрузки нескольких изображений в хранилище Firebase - PullRequest
0 голосов
/ 21 июня 2019

Я загружаю два «выбранных пользователем» изображения в хранилище Firebase и получаю их URL для сохранения в FireStore, но сохранение URL-адресов указывает только на одно из изображений, хотя они не выглядят одинаковыми.есть похожий вопрос, но о swift, и он не отвечает на мой вопрос, вот URL к этому. получить URL-адрес для загрузки из хранилища файловой базы для выгрузки нескольких файлов

Я пытался получить ссылки для загрузки с помощью ref.getDownloadUrl (), но это дало неправильные URL-адреса, а tasksnapshot.getDownloadUrl () больше не работает.Я пытался прочитать много ответов, но ничего не помогло, большинство из них устарели с помощью метода tasksnapshot.getDownloadUrl ().

        if (profileImageUri != null) {

            //upload first image
            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(); // method to save the URLs along with other info
                    } else {
                        Toast.makeText(EditProfile.this, "upload failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                    }
                    btSaveInfo.setVisibility(View.VISIBLE);
                    progressBar.setVisibility(View.GONE);
                }
            });
        }

        if (coverImageUri != null) {

            // Upload second image
            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) {

                    if (task.isSuccessful()) {
                        Uri downloadCUri = task.getResult();
                        coverImageUrl = String.valueOf(downloadCUri);
                        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();
                    } 
                }
            });

загружены два изображения. Я вижу их в своей консоли Firebase, но загружаются URL-адреса, сохраненные в FireStore.одно и то же изображение, хотя они не совпадают, но выглядят так:

  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 голосов
/ 25 июня 2019

Я только что понял, что не сохраняю свою информацию после загрузки изображения обложки, я добавил метод saveInfo в свой метод загрузки изображения onComplete обложки, и теперь он работает нормально.

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

Я все еще чувствую, что это может быть сделано лучше, поэтому, если вы знаете способ лучше, чем этот, пожалуйста, поделитесь. Мне нужен метод, с помощью которого я могу помешать пользователю инициализировать метод загрузки слишком много раз, повторно нажимая кнопку, спасибо

...