首页 / 技术 / 正文

MultipartFile转CommonsMultipartFile强转失败的解决办法

2020年02月26日 2 条评论 ... 技术 /

SpringBoot 中通过 Http 接收到的文件形式不是常用的 File 对象,而是 MultipartFile 对象,因为业务需要,想把文件转换成 File 格式的对象,并进行后续转存的操作。

这个问题拿到搜索引擎上搜索,得到了两个方案,其中一个不需要存成文件直接转换的方案吸引了我,毕竟节约硬盘操作的方法又快又简单,岂不美哉。但是如果真的这么做了,写的代码大概是这样的:

@PostMapping("/parseImage")  
    public String parseImage(@RequestParam MultipartFile uploadFiles) throws IOException{  
        CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) uploadFiles;  
        File targetFile = (File) commonsMultipartFile.getFileItem();  
        // 其他代码...  
        return "result";  
    } 

如果运行,大概就会得到这样的错误,错误如下:

org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile cannot be cast to org.springframework.web.multipart.commons.CommonsMultipartFile

错误意思是两个对象无法进行强转,出错的代码如下:

CommonsMultipartFile commonsMultipartFile  = (CommonsMultipartFile) uploadFiles;

搜索了其他各种解决方法,基本上都是一大抄,文章都是某个无名英雄写的,被抄的全网都是。

最后解决方案只能是妥协,放弃不生成文件的执念,创建了临时文件来解决,使用 MultipartFile 封装的 transferTo() 方法来将文件转换为 File 对象,转换方法的代码如下:

private File multipartFileToFile(MultipartFile dataFile) throws IOException {  
        if (!dataFile.isEmpty()) {  
            String filename = dataFile.getOriginalFilename();  
            String[] fileIngredent = filename.split("\\.");  
            File f = File.createTempFile(fileIngredent[0], "."+fileIngredent[1]);  
            // 将mutipartFile转换成file  
            dataFile.transferTo(f);  
            // 删除临时文件  
            /*if(file.exists()){  
                file.delete();  
            }*/ 
            return f;  
        }  
        return null;  
    } 

至于网上抄遍地的强转的方法为啥不管用,暂时还没有细追究,我使用的 SpringBoot 版本为 2.0.6.RELEASE 。