前言

前段时间搞的网盘的项目,初始化好了基本的登录以及上传下载的功能就一直没碰了。今天懒得搞算法和设计模式了,接着写下项目,目前网盘上传1M以上的文件会上传失败

问题

1
413 Entity Too Large

image-20210926142615079

分析

首先锁定在Nginx上面,部署后是nginx反向代理后台,web前端与nginx直接交互。且发现确实nginx默认是限制1M的请求实体。

因此就先配置下Nginx的大小限制

1
client_max_body_size 1024M; // 我这里配成1024M也就是1G

这个东西可配置在http、server或者location下,我就直接配在location下的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80;
listen [::]:80;
server_name localhost;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api/ {
client_max_body_size 1024M;
proxy_pass http://www.yournotes.cn:8080/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

重启nginx之后,上述问题消失,但仍上传不成功。等待一段时间后显示500的错

那就查看下后台的日志

1
org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException: the request was rejected because its size (22960862) exceeds the configured maximum (10485760)
1
2
3
4
@RequestMapping("upload")
public JSONObject upload(MultipartFile file){
...
}

简单调试知道这个问题在Controller方法之前,和Controller当中代码无关。需要配置关于MultipartFile文件大小限制问题。

1
2
3
4
5
6
spring:
servlet:
multipart:
enabled: true
max-file-size: 100MB
max-request-size: 100MB

这样配置之后就ok了。

总结

有两点:第一点是nginx请求实体的限制、第二点是Spring对multipart的限制.