笔者遇到的问题RT,
当用postman测试的时候,遇到
报java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.273391201583741210.8080/work/Tomcat/localhost/ROOT/tmp/source/IMG_20160129_132623
这种错误。
因为当初是通过单元测试的,但是用postman测试接口的时候出现的问题,所以百思不得其解,查询百度后,在和同事讨论后,并且debug后,发现了问题所在。
首先看下笔者的代码
public void upload(Map paramMap, MultipartFile file, String visitUrlPrix) throws Exception {
checkParams(paramMap);
//生成文件夹并保存文件
String bigExcelUrl = ExcelSplitUtils.mkdirAndSaveBigExcel(file, companyId);
//解析大文件
CompanyEmployeeListener listener = new CompanyEmployeeListener(batchCount, Boolean.TRUE);
EasyExcel.read( file.getInputStream(), CompanyEmployee.class, listener).sheet().headRowNumber(2).autoTrim(true).doRead();
List list = listener.getList();
......
}
主要是接受文件,然后保存,然后解析,
这里在单元测试的时候,如下
@Test
public void upload() throws Exception {
long startDate = System.currentTimeMillis();
Map paramMap = Maps.newHashMap();
paramMap.put(CompanyConstant.COMPANY_ID,3);
File file = new File("D://companyInfo.xlsx");
FileInputStream fileInputStream = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile("copy" + file.getName(), file.getName(), "text/plain", fileInputStream);
uploadCompanyInfoService.upload(paramMap,multipartFile,"http://12.10.2.11:8760/dgddd/test");
log.info("end");
log.info("2000个数据花费时间:{}秒",(System.currentTimeMillis()-startDate)/1000);
}
再上述代码的情况下下,使用当前的单元测试是没问题的。
当时当通过controller接口,的时候,为什么会出现这个问题呢,核心是文件找不到,
临时文件找不到,debug之后,发现在执行了mkdirAndSaveBigExcel这个方法后,临时文件就消失了,因为文件流保存后,系统临时生成的文件就自动删除了,所以网上好多说修改lcation的,对这里的情况不适用。
所以需要修改代码为:
String bigExcelUrl = ExcelSplitUtils.mkdirAndSaveBigExcel(file, companyId);
saveBigExcelUrl(companyId, bigExcelUrl);
//解析大文件
File localFile = new File(bigExcelUrl);
CompanyEmployeeListener listener = new CompanyEmployeeListener(batchCount, Boolean.TRUE);
EasyExcel.read(new FileInputStream(localFile), CompanyEmployee.class, listener).sheet().headRowNumber(2).autoTrim(true).doRead();
这里后续方法不再使用file ,需要重新new一个file: File localFile = new File(bigExcelUrl);
使用这个。
总结:通过 controller接口传入得文件,在临时文件本地化后,就会删除,不能在后续代码中使用,但是单元测试不是这样的。
参考博客:
使用MultipartFile做文件上传报FileNotFoundException问题总结_fan330660的博客-CSDN博客--------------------------------------使用MultipartFile做文件上传报FileNotFoundException问题总结--------------------------------------public String upload(@RequestParam("file") MultipartFile multipartFile)问题:使用sp...https://blog.csdn.net/fan330660/article/details/80606122解决使用Spring Boot、Multipartfile上传文件路径错误问题_daniel7443的博客-CSDN博客彻底跟路径错误say拜拜!题图:from Google1.问题描述关键字: SpringMVC 4.2.4 、 Spring Boot 1.3.1 、Servlet 3.0 、文件上传报错信息: java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.273391201583741210.8080/https://blog.csdn.net/daniel7443/article/details/51620308
SpringBoot文件上传异常之提示The temporary upload location xxx is not valid - 一灰灰Blog - 博客园原文: "一灰灰Blog之Spring系列教程文件上传异常原理分析" SpringBoot搭建的应用,一直工作得好好的,突然发现上传文件失败,提示 目录非法,实际查看目录,结果还真https://www.cnblogs.com/yihuihui/p/10372887.html
文件上传时,MultipartFile.transferTo() 方法报 FileNotFoundException - 星空流年 - 博客园Spring Upload File 报错FileNotFoundException 环境: Springboot 2.0.4 JDK1.8 内嵌 Apache Tomcat/8.5.32 https://www.cnblogs.com/cndarren/p/12558348.html