Je suis nouveau sur Flutter et Firebase, alors restez avec moi sur celui-ci.
J'essaie de supprimer un fichier dans mon stockage Firebase à l'aide de l'URL du fichier.
J'ai l'URL complète du fichier et je supprime tous les caractères à l'exception du chemin du fichier.
Ensuite, j'essaie de supprimer le fichier. En suivant d'autres réponses ici, j'utilise la commande; FirebaseStorage.instance.ref().child(filePath).delete()
Voici mon code;
static void deleteFireBaseStorageItem(String fileUrl){
String filePath = 'https://firebasestorage.googleapis.com/v0/b/dial-in-21c50.appspot.com/o/default_images%2Fuser.png?alt=media&token=c2ccceec-8d24-42fe-b5c0-c987733ac8ae'
.replaceAll(new
RegExp(r'https://firebasestorage.googleapis.com/v0/b/dial-in-21c50.appspot.com/o/'), '');
FirebaseStorage.instance.ref().child(filePath).delete().then((_) => print('Successfully deleted $filePath storage item' ));
}
Le problème est que le fichier n'est jamais supprimé.
Je pense que j'ai trouvé où est le problème.
Dans la méthode .delete()
, il existe une valeur 'app' et 'storageBucket' requise.
Lorsque j'exécute cette fonction, les valeurs sont nulles.
Je trouve cela déroutant car dans le même fichier je vois ceci;
/// The [FirebaseApp] instance to which this [FirebaseStorage] belongs.
///
/// If null, the default [FirebaseApp] is used.
final FirebaseApp app;
/// The Google Cloud Storage bucket to which this [FirebaseStorage] belongs.
///
/// If null, the storage bucket of the specified [FirebaseApp] is used.
final String storageBucket;enter code here
D'après la documentation que je peux voir, j'ai peut-être besoin d'utiliser le plugin 'Firebase core' pour créer l'application qui relie le bucket à cette base de données. Mais il n'y a pas grand chose de spécifique à Dart & flutter.
Est-ce que quelqu'un a de l'expérience avec ça?
Il n'y a donc pas de méthode pour convertir l'URL en référence de stockage pour le moment. J'espère que cela sortira dans une mise à jour Firebase.
Voici mon hack
static void deleteFireBaseStorageItem(String fileUrl){
String filePath = fileUrl
.replaceAll(new
RegExp(r'https://firebasestorage.googleapis.com/v0/b/dial-in-21c50.appspot.com/o/'), '');
filePath = filePath.replaceAll(new RegExp(r'%2F'), '/');
filePath = filePath.replaceAll(new RegExp(r'(\?alt).*'), '');
StorageReference storageReferance = FirebaseStorage.instance.ref();
storageReferance.child(filePath).delete().then((_) => print('Successfully deleted $filePath storage item' ));
}
Je sais je sais....
Ps 'dial-in-21c50.appspot.com' est pertinent pour mon application et vous devrez le modifier.
J'ai implémenté un code plus propre mais identique à @earyhe, qui utilise Uri.decodeFull () et Path.basename (). J'ai essayé et ça a marché.
import 'package:path/path.Dart' as Path;
Future<void> deleteImage(String imageFileUrl) async {
var fileUrl = Uri.decodeFull(Path.basename(imageFileUrl)).replaceAll(new RegExp(r'(\?alt).*'), '');
final StorageReference firebaseStorageRef =
FirebaseStorage.instance.ref().child(fileUrl);
await firebaseStorageRef.delete();
}