所以我已经读过这个主题,但我根本不理解堆栈上的解决方案。
我想出了这个代码:
我保存的网址如下:
final String myDataUrl = file.url;
print(myDataUrl);
blob:http://localhost:51947/2952a3b1-db6a-4882-a42a-8e1bf0ad73
&然后我试图用putString操作符将它添加到Firebase Storage中,我猜这在阅读文档时最适合我。我认为我有一个Url,因此应该能够像这样上传:
FirebaseStorage.instance
.ref()
.child("bla")
.putString(myDataUrl, format: PutStringFormat.dataUrl);
但它不起作用,它说:
Error: Invalid argument (uri): Scheme must be 'data': Instance of '_Uri'
所以我猜它无法将我的url格式化为可接受的格式。
我可以做些什么不同的事情来成功地将blob上传到firebase存储?
-----------------答案------------------
在答案的评论中回答。
您必须将Blob转换为Uint8List&上传方式:
Future<Uint8List> fileConverter() async {
final reader = html.FileReader();
reader.readAsArrayBuffer(file!);
await reader.onLoad.first;
return reader.result as Uint8List;
}
然后将其放入您的存储:
Future uploadFile(String uid) async {
if (file == null) return;
final path = "nachweise/$uid";
Uint8List fileConverted = await fileConverter();
try {
FirebaseStorage.instance
.ref()
.child(path)
.putData(fileConverted)
.then((bla) => print("sucess"));
} on FirebaseException catch (e) {
return null;
}
}
Firebase Storage SDK可以以File、字节数组或base-64编码字符串的形式上传本地数据。它接受的唯一URL是所谓的数据URL,它们以data://
开头,包含对象的完整数据。它们无法直接从您更常见的URL(如http://
或https://
(上传数据。
您需要首先将数据从该URL下载到本地设备,然后从那里上传。