1. HTTP3W博客首页
  2. 技术
  3. 服务器

生产环境上传文件大小限制与配置

前提:

生产环境中,针对上传文件服务器时提示超时,或者控制台报上传图片大小超出限制,一系列问题,由于多年工作积累,建议在部署项目环境之前,需要提前考虑到的文件上传文件配置问题(等客户提出来问题就严重了),主要异常如下:

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请求文件上传大下配置

方案1server.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="[]|{}^\`&quot;&lt;&gt;" relaxedQueryChars="[]|{}^\`&quot;&lt;&gt;"/>

注意:7.0 以上版本 maxPostSize 设置为 -1,不是0

方案2web.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());
        }
    }
}

1、原创文章,作者:诺米,如若转载,请注明出处:https://www.http3w.com/archives/787

2、本站内容若有雷同从属巧合,若侵犯了您的权益,请联系本站删除,E-mail: wtao219@qq.com

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

254007489

在线咨询:点击这里给我发消息

邮件:wtao219@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息