Multipartfile上传文件错误,提示FileNotFound

问题

今天写上传文件到服务器,服务器生成File时,遇到了FileNotFound的问题
提示说FileNotFound,场景如下


image.png

排查

是不是父目录没有创建

一开始以为是父目录不存在的问题,发现代码有的是mkdirs,不是mkdir,前者会把路径上所有缺失的父路径一起创建,可以自行了解
然后中间加了日志,发现uploadFile的绝对路径,和报异常的绝对路径,完全是两个!!!(有问题的日志删了,就是transferTo里面抛出来的)

深入transferTo

报异常的栈如下
StandardMultipartFile#transferTo
org.apache.catalina.core.ApplicationPart#write(容器是tomcat就是这个类)
看这个实现


image.png

也就是说我传的路径如果不是绝对路径,那么就会生成一个临时文件,而且没有保证父目录存在的操作
我传入的File是


image.png

刚好多了一级目录,不是在当前目录下。且不是绝对路径
所以处理的时候,在临时目录locate下面去找WXREAD_DIR/originalFileName + "." + System.currentTimeMillis()这个文件,
但是WXREAD_DIR文件夹都不存在.

解决

改成 multiPartFile.transferTo(uploadFile.getAbsoluteFile()); 就好了

吐槽

这个地方绝对设计的不合理,源码的意思就是要么绝对路径,要么只能直接在当前目录下,不能再新建目录
我的二级目录在这里刚好就bug了

refer

http://blog.csdn.net/daniel7443/article/details/51620308

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 100,920评论 9 468
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 13,520评论 2 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,813评论 19 139
  • IO流(Input Output) IO技术主要的作用是解决设备与设备之间 的数据传输问题。硬盘 -> 内存内存的...
    奋斗的老王阅读 4,417评论 1 48
  • 目的这篇教程从用户的角度出发,全面地介绍了Hadoop Map/Reduce框架的各个方面。先决条件请先确认Had...
    SeanC52111阅读 1,851评论 0 1

友情链接更多精彩内容