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.
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
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
}
});
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);
}
}
});
}
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');
}
}