Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [C:\Users\HuWeiJian\AppData\Local\Temp\tomcat.4476717864971067098.8101\work\Tomcat\localhost\ROOT] is not valid
解决办法是通过
* 自定义临时文件目录,确保目录不会被系统删除导致抛异常
* @return
@Bean
public MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory=new MultipartConfigFactory();
String location =System.getProperty("user.dir")+tempFileDir;
Log.info("location="+location);
File tmpDir=new File(location);
if(!tmpDir.exists()){
tmpDir.mkdirs();
factory.setLocation(location);
return factory.createMultipartConfig();
- 或者在配置文件中增加:server.tomcat.basedir: /yourDir
- 本人能力有限,如有错误请不吝指教。
- MultipartFile其实只是一个接口,真正实现在org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.StandardMultipartFile,
- StandardMultipartFile里面有个javax.servlet.http.Part对象,
- Part也是一个接口,真正实现在org.apache.catalina.core.ApplicationPart,
- ApplicationPart里有个org.apache.tomcat.util.http.fileupload.FileItem接口和File,
- .FileItem实现是org.apache.tomcat.util.http.fileupload.disk.DiskFileItem,File表示上传的文件(是一个临时存放文件)
- DiskFileItem是由org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory创建出来的,
- 从DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD = 10240可以得知如果文件大小在10KB以内,则直接放在内存,如果大于10KB,则存储在本地磁盘中(注意是存在临时目录中,意味着这个文件如果你不持久化那这个文件随时会被系统清除)
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 - chen_lay的博客 - CSDN博客
https://blog.csdn.net/chen_lay/article/details/52209748
SpringBoot项目优化和Jvm调优(楼主亲测,真实有效) - 熊本同学 - CSDN博客
https://blog.csdn.net/wd2014610/article/details/82182617
springboot上传大文件时内存溢出的可能解决办法在springboot中上传大文件时要考虑内存的情况,一般我们会通过在执行服务时加入-Xms512m -Xmx512m等参数加大堆内存,但这是指标不治本的,关键还是看代码处理的时候有无导致内存泄漏的原因。例如:java -Xms512m -Xmx512m -jar rent_web-1.0.0.jar有时候我们会需要把上传的文件再调...
异常org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space
由异常可知,触发的...
-Xmx1024m -Xms1024m -Xmn2g -Xss128k
-Xmx1024m:设置JVM最大可用内存为1024M。
-Xms1024m:设置JVM促使内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小...
package com.hljt.uav.utils;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storag...
上传接口:
@RequestMapping("uploadFile")
public Boolean uploadFile(@RequestParam("file") MultipartFile file) {
String rootPath = System.getProperty("user.dir");
String filePath = rootPath + "/files/test.mp4";
try {
File new
记录一下生产环境上传大文件 发生的一次内存溢出问题
管理平台在上传 大文件时抛出错误 OOM异常(jvm 内存溢出,就是内存不够用了),除了上传文件以外,其它操作没有什么问题
经过排查发现,后端controller接口 使用了 MultipartFile.getBytes() 去拿到文件的字节数组,试想下如果上传2个g的视频,那么这个bytes数组得多大?需要占用多少内存?经常网上查找,找到了一个方法,通过拷贝流的方式来做
错误的上传方式
FileUtils.uploadFile(file.get
file转MultipartFile的时候会用到MockMultipartFile
当你导入spring-test依赖的时候 会跟某些依赖冲突(暂未找到具体是哪个冲突)
解决方法 重写一个类去实现MultipartFile接口
直接用MockMultipartFile的源码
public class MultipartFileDto implements MultipartFile {
private final String name;
private String origi