将MediaFile转为File上传至Firebase Storage时触发AssertionError问题
错误分析与解决方案:AssertionError: file.absolute.existsSync()不成立
错误信息
AssertionError('package:firebase_storage/src/reference.dart':第127行第12位断言:'file.absolute.existsSync()'不成立)
触发场景
将MediaFile类型转换为File类型后,上传至Firebase Storage时出现该错误。
现有代码
MediaFile转File代码
File file = File(selectedMedias[i].toString()); // 将MediaFile转换为File String url = await uploadFile(file); // 将File上传至Firebase Storage downloadUrls.add(url); if (i == selectedMedias.length - 1) { Storytask(user?.uid ?? '', user?.photoUrl ?? '', user?.username ?? ''); }
Firebase上传代码
Future<String> uploadFile(File file) async { final metaData = SettableMetadata(contentType: 'image/jpeg'); final storageRef = FirebaseStorage.instance.ref(); Reference ref = storageRef.child('pictures/${DateTime.now().microsecondsSinceEpoch}.jpg'); final uploadTask = ref.putFile(file as File); final taskSnapshot = await uploadTask.whenComplete(() => null); String url = await taskSnapshot.ref.getDownloadURL(); return url; }
问题根源
selectedMedias[i].toString()无法返回有效的本地文件路径,导致创建的File对象指向的文件实际不存在,触发Firebase Storage上传前的断言检查(要求上传的文件必须存在)。MediaFile类不能直接通过toString()获取文件路径,需要访问其专属的路径属性。
解决方案
- 修正路径获取方式
根据你使用的媒体选择库(如image_picker、gallery_saver等),访问MediaFile对应的路径属性(通常是path或absolutePath),示例代码:
// 假设MediaFile的路径属性为path,根据实际库调整 File file = File(selectedMedias[i].path); String url = await uploadFile(file); downloadUrls.add(url); if (i == selectedMedias.length - 1) { Storytask(user?.uid ?? '', user?.photoUrl ?? '', user?.username ?? ''); }
- 增加文件存在性校验(可选)
在上传前主动检查文件是否存在,提前捕获异常:
File file = File(selectedMedias[i].path); if (await file.exists()) { String url = await uploadFile(file); downloadUrls.add(url); } else { print("错误:文件不存在,路径为${file.path}"); }
内容的提问来源于stack exchange,提问作者Eain Hmun Khin
相关产品推荐
相关产品推荐

