关于使用transTo实现文件上传报错 FileNotFoundException 的记录

环境:

  ubuntu 20.04 LTS

  JDK8 内置Tomcat

问题:

  SpringBoot使用 MultipartFile 上传文件后台报错 java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.273391201583741210.8080/work/Tomcat/localhost/ROOT/tmp/source/IMG_20160129_132623.jpg (No such file or directory)

原因:

  因为是transferTo方法报错,所以应该是写入文件的时候报错,这时候我们可以追踪下源码

 

 

 

 从源码看的话我们就可以知道,如果我们在上传文件的时候没有使用绝对路径的话,transTo方法会在相对路径前面添加个 location 路径 就是源码里面的file =new File(this.localtion,fileName),这里也就影响了SpringMVC的Multipartfile的使用

这里我们预期中的存储路径应该是项目路径/tmp/source/,但是transTo的路径是 /tmp/tomcat.273391201583741210.8080/work/Tomcat/localhost/ROOT/tmp/source/ 这个目录是tomcat的临时目录,并且我们并没有在临时目录里面创建存储文件的目录因此会报错

解决:

 一:可以使用绝对路径

1
2
3
修改前<br>dbcFile.transferTo(new File(file+File.separator+fileName));
修改后
dbcFile.transferTo(new File(file.getAbsoluteFile()+File.separator+fileName));

二:修改location的值

  麻烦,不建议整(主要是我不会)

posted @   Yapi酱  阅读(901)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示