You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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()获取文件路径,需要访问其专属的路径属性。

解决方案

  1. 修正路径获取方式
    根据你使用的媒体选择库(如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 ?? '');
}
  1. 增加文件存在性校验(可选)
    在上传前主动检查文件是否存在,提前捕获异常:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:41:07