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

Flutter中无法将图片重新上传至Firebase Storage

解决Firebase Storage下载后上传的文件不存在问题

错误提示'file.absolute.existsSync()': is not true的核心原因是:你指定的文件路径${appDocDir.absolute}/images/temp.jpg中,images文件夹可能不存在,导致Firebase Storage无法将下载的内容写入目标文件,最终上传时找不到该文件。

修复方案

  1. 确保父目录存在:在创建File对象后,先创建其所在的父目录,避免因目录缺失导致写入失败
  2. 正确等待下载任务完成:直接await下载任务,确保文件已经完全写入本地后再执行上传操作

修改后的代码

final appDocDir = await getApplicationDocumentsDirectory();
var file = File("${appDocDir.absolute}/images/temp.jpg");

// 确保父目录存在,recursive: true会自动创建多级目录
file.parent.createSync(recursive: true);

final downloadPath = FirebaseStorage.instance.ref().child(foreignPath);
// 直接await下载任务,确保文件写入完成
await downloadPath.writeToFile(file);

// 执行上传操作
var ref = FirebaseStorage.instance.ref().child(path);
task = ref.putFile(file);

final snapshot = await task.whenComplete(() {});
final urlDownload = await snapshot.ref.getDownloadURL();

关键说明

  • file.parent.createSync(recursive: true):通过parent获取文件的上级目录(即images文件夹),createSync同步创建目录,recursive: true允许创建嵌套的多级目录
  • 去掉了原代码中whenComplete的嵌套写法,直接await下载任务,这样能保证文件写入完成后才进入上传流程,避免异步时序问题

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:07:04