Flutter Web调用readAsBytes报_Namespace异常,Firebase Storage图片上传失败
Flutter Web 上传图片到Firebase Storage 崩溃问题解决
问题原因
Flutter Web环境下,image_picker返回的XFile的path字段并非真实的本地文件路径(受浏览器安全机制限制),因此通过File(XFile.path)创建的dart:io.File对象无法正常读取文件内容,调用readAsBytes()时会触发Unsupported operation: _Namespace错误。而Android端因为可以直接访问本地文件系统,所以该逻辑能正常运行。
修复后的代码
直接通过XFile自带的readAsBytes()方法获取图片字节数据,无需转换为File对象:
final pickedFiles = await imgPicker.pickMultiImage(); if (pickedFiles != null && pickedFiles.isNotEmpty) { for (int i = 0; i < pickedFiles.length; i++) { final Reference storageRef = FirebaseStorage.instance .ref() .child('images') .child('$i.jpeg'); // 直接从XFile读取字节数据 final imageBytes = await pickedFiles[i].readAsBytes(); await storageRef.putData(imageBytes); } }
额外说明
- 移除了不必要的
XFile转File的步骤,避免Web环境下的API不兼容问题 - 增加了
pickedFiles != null的空判断,提升代码健壮性 - 该逻辑同时兼容Android和Web平台,无需额外的平台分支处理
内容的提问来源于stack exchange,提问作者Adam B
相关产品推荐
相关产品推荐

