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