web-dev-qa-db-fra.com

Firebase comment obtenir l'URL de l'image à partir du stockage Firebase?

En ce moment, je récupère l'image du stockage de Firebase en utilisant le code ci-dessous:

mStoreRef.child("photos/" + model.getBase64Image())
          .getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            // Got the download URL for 'photos/profile.png'

                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception exception) {
                            // Handle any errors
                            Toast.makeTextthis, "image not dowloaded", Toast.LENGTH_SHORT).show();
                        }
                    });

How to get this URL ?

il est possible d'obtenir cette URL qui est affichée dans l'image .. ???

11
Rjz Satvara

Suivez ce lien - https://firebase.google.com/docs/storage/Android/download-files#download_data_via_url

    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'
            Uri downloadUri = taskSnapshot.getMetadata().getDownloadUrl();
            generatedFilePath = downloadUri.toString(); /// The string(file link) that you need
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle any errors
        }
    });
15
Shamik Chodankar

Selon les dernières modifications de la base de feu, voici le code mis à jour:

File file = new File(String.valueOf(imageUri));
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReference().child("images");

    storageRef.child(file.getName()).putFile(imageUri)
            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    pd.dismiss();
                    Toast.makeText(MyProfile.this, "Image Uploaded Successfully", Toast.LENGTH_SHORT).show();
                    Task<Uri> downloadUri = taskSnapshot.getStorage().getDownloadUrl();

                   if(downloadUri.isSuccessful()){
                    String generatedFilePath = downloadUri.getResult().toString();
                    System.out.println("## Stored path is "+generatedFilePath);
                }}
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    pd.dismiss();                     
                }
            });
}
2
Ronak Badjatya

Dans le passé, la base de feu utilisait getMetadata().getDownloadUrl(), et aujourd'hui, elle utilise getDownloadUrl()

Il doit être utilisé de cette façon:

.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        String image = taskSnapshot.getDownloadUrl().toString());
    }
});
2
Raphael Ramos

La méthode ci-dessus taskSnapshot.getMetadata().getDownloadUrl(); est déconseillée et en tant que substitut à condition que cette alternative:

final StorageReference ref = storageRef.child("images/mountains.jpg");
uploadTask = ref.putFile(file);

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();
    } else {
        // Handle failures
        // ...
    }
  }
});
1
magic_man

c'est comme ça que je reçois le lien de téléchargement dans kotlin Android.

 ref.putFile(filePath!!)
            .addOnSuccessListener {

                val result = it.metadata!!.reference!!.downloadUrl;
                result.addOnSuccessListener {

                   var imageLink = it.toString()


                }
            }
1
Atif AbbAsi

Oui c'est possible !!. Au lieu de quelques lignes de code compliquées et effrayantes, voici mon raccourci pour obtenir cette URL de téléchargement à partir du stockage Firebase dans Kotlin

Remarque : D'après la dernière version de Firebase, il n'y a pas getdownloadurl () ou méthode getresult () (ils sont la proie de la dépréciation cette fois-ci)

Donc, l'astuce que j'ai utilisée ici est qu'en appelant ploadSessionUri à partir de l'objet taskSnapshot qui à son tour retourne le downloadurl avec type de téléchargement, tokenid (celui qui n'est disponible que pour un laps de temps plus court) et avec d'autres éléments.

Puisque nous n'avons besoin que de télécharger l'URL, nous pouvons utiliser la sous-chaîne pour obtenir downloadurl et la concaténer avec alt = media afin de visualiser l'image.

var du:String?=null
var du1:String?=null
var du3:String="&alt=media"
val storage= FirebaseStorage.getInstance()
        var storagRef=storage.getReferenceFromUrl("gs://hola.appspot.com/")
        val df= SimpleDateFormat("ddMMyyHHmmss")
        val dataobj= Date()
        val imagepath=SplitString(myemail!!)+"_"+df.format(dataobj)+".jpg"
        val imageRef=storagRef.child("imagesPost/"+imagepath)
        val baos= ByteArrayOutputStream()
        bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos)
        val data=baos.toByteArray()
        val uploadTask=imageRef.putBytes(data)
        uploadTask.addOnFailureListener{
            Toast.makeText(applicationContext,"Failed To Upload", Toast.LENGTH_LONG).show()
        }.addOnSuccessListener { taskSnapshot ->
            imageRef.downloadUrl.addOnCompleteListener (){
                du=taskSnapshot.uploadSessionUri.toString()
                du1=du!!.substring(0,du!!.indexOf("&uploadType"))
                downloadurl=du1+du3
                Toast.makeText(applicationContext,"url"+downloadurl, Toast.LENGTH_LONG).show()
            }
        }

J'espère que ça aide !.

0
Vishaal S
 //kotlin

var uri:Uri
    uploadTask.addOnSuccessListener {t ->
        t.metadata!!.reference!!.downloadUrl.addOnCompleteListener{task ->
            uri = task.result!!

        }
    }
0
Togrul