SpringBoot上传文件 MultipartFile.getBytes 导致内存溢出

记录一下生产环境上传大文件 发生的一次内存溢出问题

管理平台在上传 大文件时抛出错误 OOM异常(jvm 内存溢出,就是内存不够用了),除了上传文件以外,其它操作没有什么问题

经过排查发现,后端controller接口 使用了 MultipartFile.getBytes() 去拿到文件的字节数组,试想下如果上传2个g的视频,那么这个bytes数组得多大?需要占用多少内存?经常网上查找,找到了一个方法,通过拷贝流的方式来做

错误的上传方式

	FileUtils.uploadFile(file.getBytes(), filePath, fileName);

具体看看解决方式吧,通过 MultipartFile 直接拿到输入流,根据给定的文件路径创建输出流,然后进行拷贝

IOUtils 导包:

import org.apache.tomcat.util.http.fileupload.IOUtils;
logger.info("文件路径:"+filePath);
logger.info("文件名称:"+fileName);
InputStream input =  file.getInputStream();
FileOutputStream out = new FileOutputStream(new File(filePath+fileName));
IOUtils.copy(input, out);
out.close();

你可能感兴趣的:(java学习)