关于使用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的值
麻烦,不建议整(主要是我不会)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 手把手教你更优雅的享受 DeepSeek
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现