File转化MultipartFile踩坑记录

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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值