firebase - 如何使用 flutter 删除 Firebase 存储文件?

我是 Flutter 和 Firebase 的新手,所以请耐心等待。

我正在尝试使用文件 Url 删除 Firebase 存储中的文件。

我有文件的完整 URL,并删除了文件路径以外的所有字符。

然后我尝试删除该文件。从这里的其他答案中,我使用命令; FirebaseStorage.instance.ref().child(filePath).delete()

下面是我的代码;

static void deleteFireBaseStorageItem(String fileUrl){

  String filePath = 'https://firebasestorage.googleapis.com/v0/b/dial-i-2345.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-2345.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 核心”插件来制作将存储桶链接到该数据库的应用程序。但是 Dart 和 Flutter 并没有什么特别之处。

有人有这方面的经验吗?

找到临时解决方案

所以目前还没有将 Url 转换为存储引用的方法。希望它会在 Firebase 更新中发布。

这是我的秘诀

 static void deleteFireBaseStorageItem(String fileUrl){

String filePath = fileUrl
                  .replaceAll(new 
                  RegExp(r'https://firebasestorage.googleapis.com/v0/b/dial-in-2345.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-2345.appspot.com' 与我的应用相关,您需要更改它。

最佳答案

更新(2021-05-22):

FirebaseStorage.instance.refFromURL(url).delete() 现在应该使用。 之前建议的 getReferenceFromUrl 似乎已从 API 中消失。

更新(2019-08-03):

根据this PR现在有一个 getReferenceFromUrl method在 FlutterFire 中,它允许通过下载 URL 查找存储引用。


上一个答案:

在 Android 上,您可以调用 getReferenceForUrl()从下载 URL 中获取 StorageReference,类似的方法存在于 iOS。

但是在FlutterFire reference docs中找不到对应的方法.不幸的是,这意味着无法从下载 URL 映射回 Flutter 中的 StorageReference

这听起来像是一个遗漏,所以我建议您对此 feature request 投 +1 .

目前,这意味着您需要拥有 Cloud Storage 中文件的相对路径才能将其从 Flutter 中删除。使用该路径,您当前的代码就可以工作。

https://stackoverflow.com/questions/54170250/

相关文章:

firebase - 在 Flutter App 上更新 FCM Token

ios - 如何使用 Runner.app 创建用于测试的 .ipa 文件?

android - Flutter NetworkImage 处理 403 错误

opencv - Flutter 实时人脸检测

flutter - 附加到多个 ScrollView 的 ScrollController

firebase - Flutter Firebase BLoC 模式

dart - 在 TextSpan 中测试文本

dart - 如何在 Flutter 中将 RefreshIndicator 与 FutureBui

android - 如何使用 Flutter 构建能够拖动到全屏的底部表单小部件?

text - 如何消除 flutter 上文本上方和下方的间隙