web-dev-qa-db-fra.com

Comment vérifier si un fichier existe dans le stockage Firebase à partir de votre application Android?

Je développe une application Android où un utilisateur clique sur une image, elle est stockée dans Firebase, les fonctions cloud traitent cette image et stocke la sortie dans Firebase sous forme de fichier texte. Afin d’afficher la sortie dans Android, l’application vérifie si le fichier de sortie existe ou non. Si oui, alors il affiche la sortie dans l'application. Si non, je dois attendre que le fichier soit disponible. 

Je ne parviens pas à trouver de documentation permettant de vérifier si un fichier existe ou non dans Firebase. Toute aide ou pointeur sera utile. 

Merci. 

9
Sarvesh Kulkarni

L'API de stockage Firebase est configurée de manière à ce que l'utilisateur ne demande qu'un fichier existant.

Ainsi, un fichier non existant devra être traité comme une erreur:

Vous pouvez consulter la documentation ici

6
Muhammad Younas

Vous pouvez utiliser getDownloadURL qui renvoie une promesse, qui peut à son tour être utilisée pour intercepter une erreur "introuvable", ou traiter le fichier s'il existe. Par exemple:

    storageRef.child("file.png").getDownloadURL().then(onResolve, onReject);

function onResolve(foundURL) { 
//stuff 
} 
function onReject(error){ 
//fill not found
console.log(error.code); 
}

Mis à jour

C'est une autre solution plus simple et plus propre.

storageRef.child("users/me/file.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        // Got the download URL for 'users/me/profile.png'
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // File not found
    }
});
4
Christlin Panneer

mon code pour cela 

 void getReferenceAndLoadNewBackground(String photoName) {
    final StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("Photos").child(photoName + ".png");
    storageReference.getDownloadUrl()
            .addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    loadBackground(storageReference);
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    int errorCode = ((StorageException) exception).getErrorCode();
                    if (errorCode == StorageException.ERROR_OBJECT_NOT_FOUND) {
                        StorageReference storageReference2 = FirebaseStorage.getInstance().getReference().child("Photos").child("photo_1.png");
                        loadBackground(storageReference2);
                    }

                }
            });
}
1
Dan Alboteanu

Voici comment je vérifie actuellement si le fichier existe. 

This.auth.user $ extrait un observable qui affiche les données de l'utilisateur actuel à partir de la base de données FireStore. Je stocke la référence d’image de profil FileStorage dans la base de données FireStore. 

J'utilise ensuite le chemin du fichier dans les données de l'utilisateur et je l'utilise pour la référence FileStorage. 

Maintenant, utilisez l'observable et vérifiez si la longueur de downloadURL est inférieure ou égale à 0.

S'il est bien supérieur à zéro, le fichier existe. alors va faire quelque chose. Sinon faire autre chose. 

ngOnInit() {
    this.userSubscription = this.auth.user$.subscribe((x) => {
    console.log(x);
    this.userUID = x.userId;
    this.userPhotoRef = x.appPhotoRef;
    this.userDownloadURL = x.appPhotoURL;
    });
    const storageRef = this.storage.ref(this.userPhotoRef);
    console.log(storageRef);
    if (storageRef.getDownloadURL.length <= 0) {
      console.log('File Does not Exist');
    } else {
      console.log('File Exists');
    }
  }
0
Kevin Summersill