MultipartFile转CommonsMultipartFile强转失败的解决办法
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 。
感谢你的赏识与认可
支付宝
微信支付
使用手机访问这篇文章
本文许可协议 © CC BY-NC-SA 4.0 转载请注明来源
文章不错非常喜欢
如果你只是需要InputStream,请把poi版本升到最新,我现在是4.1.2。踩了3天坑,发现是版本太低了,我吐了。