Multipartfile上传文件错误,提示FileNotFound

问题

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


Multipartfile上传文件错误,提示FileNotFound_第1张图片
image.png

排查

是不是父目录没有创建

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

深入transferTo

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


Multipartfile上传文件错误,提示FileNotFound_第2张图片
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

你可能感兴趣的:(Multipartfile上传文件错误,提示FileNotFound)