【发布时间】:2019-06-07 18:38:03
【问题描述】:
我是 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' 与我的应用相关,您需要更改它。
【问题讨论】:
-
这些值通常是从您在此设置步骤中包含在应用程序中的配置文件/数据中读取的:firebase.google.com/docs/flutter/…
-
谢谢弗兰克。我运行了这个设置,我假设大部分数据都在我安装的 'google-services.json' 和 'GoogleService-Info.plist' 文件中。我可以保存文件没有问题。似乎只是在删除它们时。
-
嗯.. 使用完全相同的配置。啊,等等,我知道发生了什么事。您将下载 URL 传递到
child,这将不起作用。让我找到可以获取下载 URL 并将其转换为正确的StorageReference的正确方法。 -
@earyhe,您尝试删除图像文件 (png) 是否正确?也许您的图像文件的路径是
"o/default_images/user.png"? -
非常感谢提供临时解决方案,我被困了两个星期,如果不是你的解决方案,我只好等到期待已久的功能出现了。
标签: firebase dart flutter firebase-storage