Как удалить файл Firebase Storage с флаттером? - PullRequest
0 голосов
/ 13 января 2019

Я новичок в Flutter и Firebase, так что потерпите меня на этом.

Я пытаюсь удалить файл из моего хранилища Firebase, используя файл URL.

У меня есть полный URL-адрес файла и я удалю все символы, кроме пути к файлу.

Затем я пытаюсь удалить файл. Из следующих ответов здесь я использую команду; FirebaseStorage.instance.ref().child(filePath).delete()

Ниже мой код;

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

}

Проблема в том, что файл никогда не удаляется.

Мне кажется, я выяснил, где проблема.

В методе .delete() есть обязательные значения 'app' и 'storageBucket'.

Когда я запускаю эту функцию, значения равны нулю.

See screen shot

Я нахожу это запутанным, потому что в том же файле я вижу это;

/// 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

Из документации, которую я вижу, возможно, мне нужно использовать плагин 'Firebase core', чтобы создать приложение, которое связывает корзину с этой базой данных. Но в Dart & flutter не так много специфического.

У кого-нибудь есть опыт с этим?

Найдено временное решение

Так что в настоящее время нет способа конвертировать URL в ссылку на хранилище. Надеюсь, это выйдет в обновлении Firebase.

Вот мой хак

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

}

Я знаю .... я знаю ....

PS 'dial-in-21c50.appspot.com' имеет отношение к моему приложению, и вам необходимо его изменить.

1 Ответ

0 голосов
/ 14 января 2019

Обновление (2019-08-03):

Согласно этому PR теперь в FlutterFire есть getReferenceFromUrl метод , который позволяет искать ссылку на хранилище по URL загрузки.


Предыдущий ответ:

В Android вы можете позвонить getReferenceForUrl(), чтобы получить StorageReference из URL-адреса для загрузки, и аналогичный метод существует в iOS.

Но я не могу найти соответствующий метод в справочных документах FlutterFire . К сожалению, это означает, что нет способа сопоставить URL-адрес загрузки с StorageReference во Flutter.

Это звучит как упущение, поэтому я рекомендую разыграть +1 по этому запросу функции .

На данный момент это означает, что вам нужно иметь относительный путь к файлу в облачном хранилище, чтобы иметь возможность удалить его из Flutter. С этим путем ваш текущий код будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...