tomcat7容器下Spring4.x限制上传文件大小问题处理

环境: apache-tomcat-7.0.59+JAVA7+spring4.0.5

spring xml配置

<bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="${file_size}"></property>
        <property name="defaultEncoding" value="utf-8"></property>
        <property name="resolveLazily" value="true"></property>
    </bean>

注意:resolveLazily为true的意思为文件超出限制后,异常在controller层报出,如果不配置的话,必须用exceptionResolver的方式才能捕获到异常。

controller层处理拦截并处理异常代码:

@ExceptionHandler(MaxUploadSizeExceededException.class)
    public
    @ResponseBody
    String handleException(Exception ex, HttpServletRequest request) throws Exception {
        ResponseResult<Object> result = new ResponseResult<Object>(FAILED, "文件超出大小限制!");
        return mapper.writeValueAsString(result);
    }

以上内容来自于网络,但我测试的时候,html使用ajaxFileUpload提交后始终进入error回调,而不是预期的success回调,导致页面无法提示文件过大的提示。

$.ajaxFileUpload({
                url: 'api/user/getImageWidthAndHeight',
                secureuri: false,
                type: 'POST',
                fileElementId: 'headImag',
                dataType: 'json',
                success: function (data, status) {
                    ...
                }, error: function () {
                    alert("图片处理失败,请重新选择!");
                }
            });

通过chrome断点调试发现有“net::ERR_CONNECTION_RESET”报错,网上搜索了一下,原来tomcat7|8有上传大小的限制,超过默认文件大小将断开链接,具体的配置项和说明如下:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" maxSwallowSize="209715200"/>

对,就是maxSwallowSize,默认是坑爹的2097152=2MB。

maxSwallowSize:The maximum number of request body bytes (excluding transfer encoding overhead) that will be swallowed by Tomcat for an aborted upload. An aborted upload is when Tomcat knows that the request body is going to be ignored but the client still sends it. If Tomcat does not swallow the body the client is unlikely to see the response. If not specified the default of 2097152 (2 megabytes) will be used. A value of less than zero indicates that no limit should be enforced.

参见tomcat官方配置说明:http://tomcat.apache.org/tomcat-8.0-doc/config/http.html 中的maxSwallowSize

转载于:https://my.oschina.net/sannychan/blog/465303

Spring Boot 2中,使用Jetty服务器上传文件可以通过以下步骤实现: 1. 添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> ``` 2. 在application.properties文件中添加以下配置: ``` server.port=8080 spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB spring.servlet.multipart.file-size-threshold=2KB ``` 其中,`spring.servlet.multipart.enabled=true`表示启用文件上传功能,`spring.servlet.multipart.max-file-size`和`spring.servlet.multipart.max-request-size`分别表示上传文件的最大大小和请求的最大大小,`spring.servlet.multipart.file-size-threshold`表示当上传文件大小超过此阈值时,将使用磁盘存储文件。 3. 在控制器中添加文件上传接口: ```java @RestController public class FileUploadController { @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { // 处理上传文件 if (!file.isEmpty()) { byte[] bytes = file.getBytes(); String fileName = file.getOriginalFilename(); // 存储文件 // ... return "上传成功"; } else { return "文件为空"; } } } ``` 在以上代码中,`@PostMapping("/upload")`表示接受POST请求,并且请求路径为`/upload`,`@RequestParam("file")`表示接收名为`file`的文件参数。 关于Tomcat文件上传问题,可以参考类似的步骤,在application.properties文件中添加以下配置: ``` spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB spring.servlet.multipart.file-size-threshold=2KB ``` 然后在控制器中添加文件上传接口即可。需要注意的是,Tomcat默认不支持文件上传,需要手动添加相应的依赖,比如在Maven项目中,可以添加以下依赖: ```xml <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>${tomcat.version}</version> </dependency> ``` 其中,`${tomcat.version}`为Tomcat版本号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值