web-dev-qa-db-fra.com

Comment supprimer un fichier de stockage Firebase avec flutter?

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.

See screen shot

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?

Solution temporaire trouvée

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.

9
earyzhe

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();
 }
0
harlandgomez