springboot已配置了文件上传最大限制
#servlet multipart
spring.servlet.multipart.max-file-size=100Mb
spring.servlet.multipart.max-request-size=100Mb
上传控制器也配置了文件上传大小
/**
* 通用上传文件.文件的展示路径由调用方组合
*
* @param file
* @param request
* @return
*/
@RequestMapping("/sys/upload")
public CallResult upload(@RequestParam(value = “files”) MultipartFile files, HttpServletRequest request) {
CallResult result = new CallResult<>();
if (files.isEmpty()) {
result.setStatus(ResultEnum.PARAM_ERROR.getStatus());
result.setMessage(SpringContextHolder.getMessage(“no.data”, null));
return result;
}
String filePath = null;
UploadItem item = new UploadItem();
item.setAllowedFiles(AllowFiles);
item.setCreateDateDir(true);
item.setFileSize(1024 * 1024 * 100);
try {
filePath = uploadFile(files, item);
// 本地上传图片,数据库存相对路径,页面展示时前端拼接路径
if (AttachmentFactory.getCurrentMethod() != AttactmenMethod.local) {
filePath = UrlHelper.mergeUrl(SysParam.getFileServer(), filePath);
}
result.setData(filePath);
} catch (Exception e) {
logger.error("", e);
result.setResult(ResultEnum.PARAM_ERROR.getStatus(), e.getMessage());
}
return result;
}
可是上传过程中,过于大的文件仍然报错413,由此可见nginx 更改配置client_max_body_size没有生效
在nginx使用过程中,上传文件的过程中,通常需要设置nginx报文大小限制。避免出现413 Request Entity Too Large。
经查证是location上配置了,导致覆盖了http上配置的,去了location上面的配置可以了,重启nginx,发现上传大的文件可以了,http、server、location三种配置方式,配置一种就可以,避免被覆盖。
别的情况是如下:
client_max_body_size设置在哪里,nginx -s reload后,依然一直报413.多次尝试reload,始终无效。最终决定kill 进程,restart,终于好了。
由此可见,nginx reload并不一定好使。
设置如下:
可以选择在http{ }中设置:client_max_body_size 20m;
也可以选择在server{ }中设置:client_max_body_size 20m;
还可以选择在location{ }中设置:client_max_body_size 20m;
三者到区别是:http{} 中控制着所有nginx收到的请求。而报文大小限制设置在server{}中,则控制该server收到的请求报文大小,同理,如果配置在location中,则报文大小限制,只对匹配了location 路由规则的请求生效。
http{
#控制全局nginx所有请求报文大小
#client_max_body_size 20m;
server{
#控制该server的所有请求报文大小
#client_max_body_size 20m;
location a {
}
location b{
#控制满足该路由规则的请求报文大小
#client_max_body_size 20m;
}
}
server {
}
}