web-dev-qa-db-de.com

Nach dem Hochladen einer Datei in Android Firebase Storage, wie erhält man die Url-Datei? getDownloadUrl () funktioniert nicht

In meinem neuen Android-Firebase-Projekt habe ich die com.google.firebase:firebase-storage:16.0.1-Bibliothek verwendet.

Ich erhalte den folgenden Fehler:

 enter image description here

Ich habe ein anderes Projekt mit der Bibliothek firebase-storage:15.0.2 und taskSnapshot.getDownloadUrl(); geöffnet, die an diesem Projekt gearbeitet haben. Nach der Verwendung der neuesten Abhängigkeitsbibliothek funktioniert es jedoch nicht.

Wie bekomme ich nun die Datei-URL?

Wie kann ich den Link zum Herunterladen von Dateien erhalten?

Danke im Voraus!

8
Hasib Akter

Ich habe 2 Lösungen für mein Problem gefunden.

Firebase Google Dokumentation :

//add file on Firebase and got Download Link
filePath.putFile(imageUri).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 filePath.getDownloadUrl();
    }
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
        if (task.isSuccessful()){
            Uri downUri = task.getResult();
            Log.d(TAG, "onComplete: Url: "+ downUri.toString());
        }
    }
});

Eine andere Lösung! 

Es ist einfacher und kleiner als die Google Firebase-Dokumentation, und ich verwende es:

filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Log.d(TAG, "onSuccess: uri= "+ uri.toString());
            }
        });
    }
});
18
Hasib Akter

Diese Methode wurde in Version 16.0.1 nicht mehr empfohlen (siehe Firebase-Versionshinweise

StorageReference.getDownloadUrl ()

Wenn Sie sie nach dem Hochladen der Datei erhalten möchten, müssen Sie deren Dokumentation here überprüfen. Es ist bereits aktualisiert.

4
goblin

taskSnapshot.getDownloadUrl () ist veraltet, daher empfehle ich Ihnen, in Ihrer addOnSuccessListener () -Methode Ihre storageReference zu verwenden und die getDownloadUrl () -Methode aufzurufen, um die URL der Datei abzurufen, und Sie können damit machen, was Sie möchten. Ich hoffe es hilft.

         mUploadTask = storageRef.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                // get the image Url of the file uploaded
                storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        // getting image uri and converting into string
                        Uri downloadUrl = uri;
                       fileUrl = downloadUrl.toString();


                    }
                });

            }
        });
0
ali sampson

Firebase hat ihre Methode aktualisiert. Bitte aktualisieren Sie sich selbst. Verwenden Sie diese Methode:

dies ist die grundlegende Zeile, bei der Sie sich nervig fühlen. Ganz einfach, geben Sie den Download-Pfad auf diese Weise ein

 StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());
  UploadTask  uploadTask = ref.putFile(filePath);
  Task<Uri> urlTask = 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();
     }

                                                              // Continue with the task to get the download URL
     return ref.getDownloadUrl();
   }
 }).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
      if (task.isSuccessful()) {
        Uri downloadUri = task.getResult();


    ///here is your image url enjoy this 

          Toast.makeText(CloudStorageActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();

        }


      } else {


        // Handle failures
        // ...
      }
    }
  });
0
Najaf Ali

so bekomme ich in Kotlin Android einen Download-Link.

 ref.putFile(filePath!!)
            .addOnSuccessListener {
            val result = it.metadata!!.reference!!.downloadUrl;
            result.addOnSuccessListener {

               val imageLink = it.toString()


            }
        }
0
Atif AbbAsi