Flutter中无法将图片重新上传至Firebase Storage
解决Firebase Storage下载后上传的文件不存在问题
错误提示'file.absolute.existsSync()': is not true的核心原因是:你指定的文件路径${appDocDir.absolute}/images/temp.jpg中,images文件夹可能不存在,导致Firebase Storage无法将下载的内容写入目标文件,最终上传时找不到该文件。
修复方案
- 确保父目录存在:在创建File对象后,先创建其所在的父目录,避免因目录缺失导致写入失败
- 正确等待下载任务完成:直接
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
相关产品推荐
相关产品推荐

