生产环境上传文件大小限制与配置
前提:
生产环境中,针对上传文件服务器时提示超时,或者控制台报上传图片大小超出限制,一系列问题,由于多年工作积累,建议在部署项目环境之前,需要提前考虑到的文件上传文件配置问题(等客户提出来问题就严重了),主要异常如下:
tomcat文件大小限制异常:
上传的文件大于了1048576 bytes. 单位换算得出:1024*1024=1048576 bytes=1 M
org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
nginx上传文件异常:
超出默认大小限制-附件,提示:413 Request Entity Too Large
言归正转,针对上面重点问题,我们配置方案如下:
一、前置区Nginx设置
找到nginx的配置文件nginx/conf/nginx.conf,在htto块中,添加如下参数配置:
http {
#限制大小
client_max_body_size 10m;
}
注意:该参数在nginx.conf中默认是没有配置的,不配置的情况下,nginx默认限制请求附件大小为:1M。
即:默认当你通过nginx代理上传附件,大于1M的文件时,浏览器就会抛出异常。
--- 设置到http{}内,控制全局nginx所有请求报文(附件)大小; --- 设置到server{}内,控制该server的所有请求报文(附件)大小; --- 设置到location{}内,只控制满足该路由规则的请求报文(附件)大小。
重载配置或者重启nginx
service restart nginx
二、服务端Tomcat设置
springBoot自带tomcat配置
原因:
springBoot项目自带的tomcat对上传的文件大小有默认的限制,SpringBoot官方文档中展示:每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。
解决:
【方案1】解决方法 Spring Boot 2.0 版本,在 【application.xml】配置文件中加入如下代码:
# maxFileSize 单个数据大小
spring.servlet.multipart.maxFileSize=10MB
# maxRequestSize 是总数据大小
spring.servlet.multipart.maxRequestSize=100MB
【方案2】写配置文件
/**
* 文件上传配置类
*
* @Author wtao
* @Date 2022/07/25 01:34
* @Version 1.0
**/
@Configuration
public class FileUploadConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
// 单个数据大小
factory.setMaxFileSize("102400KB"); // KB,MB
// 总上传数据大小
factory.setMaxRequestSize("1024000KB");
return factory.createMultipartConfig();
}
}
外部Tomcat8对POST请求文件上传大下配置
【方案1】server.xml配置方法
修改tomcat安装目录下的配置文件tomcat../conf/server.xml,找到里面的标签,在该标签中添 加"maxPostSize"属性,将该属性值设置成你想要的最大值,单位是字节,或者把这个值设置为 -1(maxPostSize="-1"),tomcat将不再检查POST的大小
<Connector port="9000" protocol="HTTP/1.1"
connectionTimeout="20000"
maxPostSize="-1"
redirectPort="8443" relaxedPathChars="[]|{}^\`"<>" relaxedQueryChars="[]|{}^\`"<>"/>
注意:7.0 以上版本 maxPostSize 设置为 -1,不是0
【方案2】web.xml配置方法
<servlet>
<multipart-config>
<location></location>
<max-file-size>-1</max-file-size>
<max-request-size>-1</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
【方案3】注解配置方法
与方案2,二选一,web.xml配了的话,注解的就不生效了
@MultipartConfig
public class UploadPhotoServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
Collection<Part> parts = request.getParts();
System.out.println(parts.size());
for (Part part : parts) {
System.out.println(part.getName());
}
}
}
2、本站文章部分来源注册用户发布或互联网收集而来,若有侵权,请邮件联系作者。
邮箱地址:wtao219@qq.com