一、Spring MVC文件上传大小和类型限制
Spring MVC中文件上传的大小和类型限制可以通过配置MultipartResolver来实现。
- 配置maxUploadSize属性来限制上传文件的大小,单位为bytes。
示例代码:
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Bean
public MultipartResolver multipartResolver() {
StandardServletMultipartResolver resolver = new StandardServletMultipartResolver();
// 限制上传文件大小为1MB
resolver.setMaxUploadSize(1024 * 1024);
return resolver;
}
}
- 配置allowedFileTypes属性来限制上传文件的类型。
示例代码:
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Bean
public MultipartResolver multipartResolver() {
StandardServletMultipartResolver resolver = new StandardServletMultipartResolver();
// 限制上传文件类型为txt和png
resolver.setAllowedFileTypes(new String[]{"txt", "png"});
return resolver;
}
}
二、超大文件上传bug问题
当上传超大文件时,Spring MVC默认使用内存的方式来存储文件数据,如果上传文件超过内存限制,就会导致OutOfMemoryError。
这个问题可以通过设置MultipartResolver的maxInMemorySize属性解决,该属性设置上传文件在内存中的最大限制。超过该限制的文件在上传过程中会被写入磁盘。
示例代码:
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Bean
public MultipartResolver multipartResolver() {
StandardServletMultipartResolver resolver = new StandardServletMultipartResolver();
// 设置上传文件在内存中的最大限制为100KB
resolver.setMaxInMemorySize(100 * 1024);
return resolver;
}
}
另外,还可以通过配置Servlet的multipart-config参数来实现超大文件上传的支持。
示例代码:
@WebServlet(name = "fileUploadServlet", urlPatterns = "/file/upload", asyncSupported = true,
multipartConfig = @MultipartConfig(location = "D:/temp", fileSizeThreshold = 1024 * 1024 * 10,
maxFileSize = 1024 * 1024 * 100, maxRequestSize = 1024 * 1024 * 1000))
public class FileUploadServlet extends HttpServlet {
...
}
上面的代码中,通过@MultipartConfig注解来配置文件上传的参数。其中:
- location属性指定上传文件的保存路径;
- fileSizeThreshold属性指定文件大小达到该阈值后,会将上传文件写入磁盘;
- maxFileSize属性指定上传文件的最大大小;
- maxRequestSize属性指定请求中所有上传文件的总大小。
参考链接:
- Spring MVC File Upload Size Limit(https://www.baeldung.com/spring-file-upload);
- SpringMVC文件上传超大文件bug解决(https://www.cnblogs.com/flyingflying/p/5189437.html)。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring MVC文件上传大小和类型限制以及超大文件上传bug问题 - Python技术站