添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

管理平台在上传 大文件时抛出错误 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();
                    记录一下生产环境上传大文件  发生的一次内存溢出问题管理平台在上传  大文件时抛出错误  OOM异常(jvm 内存溢出,就是内存不够用了),除了上传文件以外,其它操作没有什么问题经过排查发现,后端controller接口  使用了 MultipartFile.getBytes() 去拿到文件的字节数组,试想下如果上传2个g的视频,那么这个bytes数组得多大?需要占用多少内存?经常网上查找,找到了一个方法,通过拷贝流的方式来做错误的上传方式	FileUtils.uploadFile(file.get
				
springboot上传大文件时内存溢出的可能解决办法 在springboot中上传大文件时要考虑内存的情况,一般我们会通过在执行服务时加入-Xms512m -Xmx512m等参数加大堆内存,但这是指标不治本的,关键还是看代码处理的时候有无导致内存泄漏的原因。 例如:java -Xms512m -Xmx512m -jar rent_web-1.0.0.jar 有时候我们会需要把上传的文件再调...
上传接口: @RequestMapping("uploadFile") public Boolean uploadFile(@RequestParam("file") MultipartFile file) { String rootPath = System.getProperty("user.dir"); String filePath = rootPath + "/files/test.mp4"; try { File new
getBytes()方法详解 在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这表示在不同的操作系统下,返回的东西不一样! 1、 str.getBytes();  如果括号中不写charset,则采用的是Sytem.getProperty("file.encoding"),即当前文件的编码方式,  2、  str.getBytes("chars
*这里不仅可以传多个文件,还可以传其他参数。示例: *public R utilsuploadfile(@RequestParam MultipartFile[] files, * @PathVariable String modulename, * @PathVariable String filetype, * @PathVariable Integer size, MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request; Map<String, MultipartF...
fileMultipartFile的时候会用到MockMultipartFile 当你导入spring-test依赖的时候 会跟某些依赖冲突(暂未找到具体是哪个冲突) 解决方法 重写一个类去实现MultipartFile接口 直接用MockMultipartFile的源码 public class MultipartFileDto implements MultipartFile { private final String name; private String origi
Spring Boot提供了一种方便的方式将File转换为MultipartFileMultipartFile是Spring提供的一个接口,可以接受多部分数据,比如通过HTTP上传的文件。 首先需要导入MultipartFile的依赖,可以在pom.xml文件中添加以下代码: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 在代码中,可以使用如下方法将File转换为MultipartFile: ```java File file = new File("path/to/file"); FileInputStream input = new FileInputStream(file); MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "application/octet-stream", input); 这里首先创建了一个File对象,然后通过FileInputStream读取文件内容。接着使用MockMultipartFile创建一个MultipartFile实例。其中,第一个参数是表单数据中file的name,第二个参数是文件名,第三个参数是文件类型,第四个参数是文件的字节流。完成这些步骤后,就可以使用该multipartFile对象进行文件上传等操作了。 总之,Spring Boot提供了很多便捷的开发工具和API,可以大大简化开发人员的工作量,让开发过程更加高效和愉悦。
曾经有一个梦: springboot MultipartFile接口的实现类有2个默认是StandardMultipartFile,其实底层调的也是 ByteArrayOutputStream out = new ByteArrayOutputStream(4096); copy((InputStream)in, (OutputStream)out); return out.toByteArray(); mybatis-plus 环境配置多数据源,Druid数据库连接池 qq_42325824: vue.js获取视频,mp3播放时长 ljqhello2008: 能给个完整的代码吗 这个代码前端不能获取到时长吧 java Pdf 加水印 Cdf(人名): 学习佳作,顺手点赞与关住,期待大佬回访! SpringCloud-Oauth2 不同类型用户认证 dongjuntao1993: 你自己测试过吗 安装centos7 安装mysql,出现报错MySQL 8.0 Community Server“ repository are already installed but they are not nginx http 重定向 到https JDK jvisualvm JMX远程连接 docker 容器