将Blob Url上载到Firebase Storage | Flutter



所以我已经读过这个主题,但我根本不理解堆栈上的解决方案。

我想出了这个代码:

我保存的网址如下:

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下载到本地设备,然后从那里上传。

最新更新