美文网首页
SpringBoot上传文件失败!

SpringBoot上传文件失败!

作者: 最终幻想_5b57 | 来源:发表于2019-02-14 14:01 被阅读0次

    1.背景

    年后放假回来一向运行很好的项目,突然间文件上传不了。看了日志报错如下

    image

    2.原因

    在linux系统中,springboot应用服务再启动(java -jar 命令启动服务)的时候,会在操作系统的/tmp目录下生成一个tomcat*的文件目录,上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间无人问津的话,就可能导致上面这个问题。

    3.解决

    1.重启服务,临时方案:会重新生成tomcat目录,但是生产环境不建议如此操作;

    2.手动创建tomcat*目录(报错不存在的目录)

    1. 添加配置类代码
    /** 文件上传临时路径 */ 
    @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

    相关文章

      网友评论

          本文标题:SpringBoot上传文件失败!

          本文链接:https://www.haomeiwen.com/subject/hzkeeqtx.html