Я новичок в 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'.
Когда я запускаю эту функцию, значения равны нулю.
Я нахожу это запутанным, потому что в том же файле я вижу это;
/// 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' имеет отношение к моему приложению, и вам необходимо его изменить.