java.io.FileNotFoundException: /home/project/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/work/Tomcat/localhost/ROOT/upload_9327840f_8cf2_4754_86fd_3982389191f7_00000000.tmp (没有那个文件或目录)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.getInputStream(DiskFileItem.java:194)
at org.apache.catalina.core.ApplicationPart.getInputStream(ApplicationPart.java:100)
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile.getInputStream(StandardMultipartHttpServletRequest.java:250)
一、配置文件
server.tomcat.basedir: 自定义tmp文件夹目录
目录没有被清除掉且具有操作权限
二、代码检查
1、导入execl文件 先检查字段是否符合要求
2、读文件内容
第一步,此时tmp目录下存在导入的文件,第二步tmp文件消失,报NoSuchFile
三、原因
第一步中multipartfile被转了一遍 transferTo File
DiskFileItem 源码:
File outputFile = this.getStoreLocation(); if (outputFile == null) { throw new FileUploadException("Cannot write uploaded file to disk!"); } this.size = outputFile.length(); if (!outputFile.renameTo(file)) { BufferedInputStream in = null; BufferedOutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(outputFile)); out = new BufferedOutputStream(new FileOutputStream(file)); IOUtils.copy(in, out); out.close(); } finally { IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); } }
此时,文件已经被mv掉了
第二步再去file.getInput..... 文件已经不存在