1.背景
年后放假回来一向运行很好的项目,突然间文件上传不了。看了日志报错如下
image2.原因
在linux系统中,springboot应用服务再启动(java -jar 命令启动服务)的时候,会在操作系统的/tmp目录下生成一个tomcat*的文件目录,上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间无人问津的话,就可能导致上面这个问题。
3.解决
1.重启服务,临时方案:会重新生成tomcat目录,但是生产环境不建议如此操作;
2.手动创建tomcat*目录(报错不存在的目录)
- 添加配置类代码
/** 文件上传临时路径 */
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory =newMultipartConfigFactory();
factory.setLocation("/tmp");
returnfactory.createMultipartConfig();
}
注:
注入bean方式
1.可以直接在springboot启用类里面加上面的方法
2.新建一个config类
image扩展:
导入controller代码
@RequestMapping(value = "/importData" ,produces="application/json;charset=UTF-8")
public ResultDTO<Map<String,String>> upLoadCabinet(@RequestParam("file") MultipartFile file){
InputStream inputStream = null;
XSSFWorkbook xssfWorkbook = null;
inputStream = file.getInputStream();
xssfWorkbook = new XSSFWorkbook(inputStream);
for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
if (xssfSheet == null) {continue;}
// Read the Row
for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
if (xssfRow != null) {
AutoCabinetImport anImport = new AutoCabinetImport();
XSSFCell cell = xssfRow.getCell(0);
String reason = null;
String desc = null;
if(xssfRow.getCell(1) != null){
xssfRow.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
reason = xssfRow.getCell(1).getStringCellValue();
}
if(xssfRow.getCell(2) != null){
xssfRow.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
desc = xssfRow.getCell(2).getStringCellValue();
}
}
}
详细的上传可以参考:
https://blog.csdn.net/gnail_oug/article/details/80324120
网友评论