File转化MultipartFile踩坑记录
项目开发中,知道文件的绝对路径会直接通过new File(String path)创建File,但调用其他接口的时候所需文件参数类型是MultipartFile,所以需要将File转化为MultipartFile,我选择了以下方式转化:
InputStream inputStream = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile(String name, String originalFilename, String contentType, InputStream contentStream);
但对于小文件是没有任何问题,可一但遇到大文件加上服务器所设置的最大内存不足够大的时候,就抛出OOM异常,排查后发现出现这个异常的原因是用MockMultipartFile转化的时候会将流写入内存导致。
例如:本地测试时候内存设置的最大内存是2G,一个1G左右的文件用这种方式转化,OOM异常就会被触发。
为了解决OOM异常发生用了另一种转化方式CommonsMultipartFile(FileItem item),具体的转化方式如下:
/**
* 通过路径获得MultipartFile
*/
public static MultipartFile fileToMultipart(String path){
File file = new File(path);
//无参构造,文件大小最大值便是默认值10kb,超过10Kb便会通过生成临时文件转化不占用内存
FileItemFactory factory = new DiskFileI