记录一下生产环境上传大文件 发生的一次内存溢出问题
管理平台在上传 大文件时抛出错误 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...
file转MultipartFile的时候会用到MockMultipartFile
当你导入spring-test依赖的时候 会跟某些依赖冲突(暂未找到具体是哪个冲突)
解决方法 重写一个类去实现MultipartFile接口
直接用MockMultipartFile的源码
public class MultipartFileDto implements MultipartFile {
private final String name;
private String origi
Spring Boot提供了一种方便的方式将File转换为MultipartFile。MultipartFile是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,可以大大简化开发人员的工作量,让开发过程更加高效和愉悦。
曾经有一个梦:
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 容器