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

Flutter MultipartRequest上传PlatformFile报FileSystemException求解

问题根因

运行时抛出FileSystemException: Cannot open file, path = 'PlatformFile'是因为构造File对象时传入了panCard.toString()、aadharCard.toString()作为路径参数。PlatformFile实例调用toString()只会返回类名字符串"PlatformFile",并非文件的真实存储路径,系统找不到对应路径的文件就会触发该异常。

修复方案

根据你的运行平台选对应方案即可,两个方案都能解决当前报错。

方案1:仅移动端/桌面端使用

你之前注释掉的代码思路正确,直接读取PlatformFile的真实path属性构造文件即可,不需要调用toString(),替换原有的文件上传代码块:

// 上传PAN卡文件
request.files.add(await http.MultipartFile.fromPath(
  'company_pancard_doc',
  panCard!.path!,
));
// 上传Aadhaar卡文件
request.files.add(await http.MultipartFile.fromPath(
  'adhar_udyam_udoyog_doc',
  aadharCard!.path!,
));

注意:Web平台下FilePicker返回的PlatformFile的path属性恒为null,该方案无法在Web端生效,需使用方案2。

方案2:全平台兼容(含Web)

FilePicker选中文件后,会直接将文件的二进制字节数据存在PlatformFile的bytes字段中,不需要额外通过File对象读取磁盘,直接用字节构造MultipartFile即可,适配所有Flutter运行平台:

// 上传PAN卡文件
request.files.add(http.MultipartFile.fromBytes(
  'company_pancard_doc',
  panCard!.bytes!,
  filename: panCard.name, // 传入原始文件名,方便服务端识别文件信息
));
// 上传Aadhaar卡文件
request.files.add(http.MultipartFile.fromBytes(
  'adhar_udyam_udoyog_doc',
  aadharCard!.bytes!,
  filename: aadharCard.name,
));
优化建议
  • 正式环境下访问panCard.path、panCard.bytes等属性前先做非空校验,避免空指针异常
  • 上传100MB以上大文件时优先选fromPath的流式上传方案,比fromBytes一次性把全量文件读入内存更稳定,不会触发内存溢出
  • 不要直接对实体类对象调用toString()作为路径参数,文件路径必须显式读取对象的path字段值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:24:32