关于 spring.http.multipart.max-file-size 与 spring.servlet.multipart.max-file-size 的混淆
Confusion regarding spring.http.multipart.max-file-size vs spring.servlet.multipart.max-file-size
我花了好几天时间让 Spring 启动上传文件正常工作,但是,与 Spring 一样,你不知道魔法是如何工作的,甚至在使用这个框架多年之后 -你必须 google 很多次才能弄清楚哪里出了问题,解决问题就像走迷宫一样,这是可维护性的噩梦。
使用Spring Boot 2.2.0.M3 进行文件上传 2 对设置有什么区别?哪个是对的?
spring.http.multipart.max-file-size=-1
spring.http.multipart.max-request-size=-1
上面的"http"和SpringREST控制器方法一起使用就是这样的...
@GetMapping("/文件/{文件名:.+}")
@ResponseBody
public ModelAndView yourMethod(.....)
或者这根本不需要并且是一个完整的红鲱鱼,下面的设置为大于 REST http 或 Servlet 请求的默认值 1MB 的文件完成所有工作。
spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1
上传异常
超过最大上传大小;嵌套异常是 java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: 字段文件超出其最大允许大小 1048576 字节。
他们更改了不同版本的 属性 名称。
Spring 启动 1.3.x 及更早版本
multipart.max-file-size
multipart.max-request-size
Spring启动后 1.3.x:
spring.http.multipart.max-file-size=-1
spring.http.multipart.max-request-size=-1
在 Spring Boot 2.0 之后:
spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1
max-file-size Vs max-request-size
spring.servlet.multipart.max-file-size = 2MB
上传支持的每个文件的最大大小为 2MB;
同时支持MB或KB后缀;
默认 1MB
spring.servlet.multipart.max-request-size=10MB
整个请求的最大大小为 10MB;
也支持MB或KB后缀
对于无限的上传文件大小,设置-1
似乎会使文件大小无限。
更新:
您不需要在控制器级别指定任何 spring.** property
(在某些情况下期望 headers Content-Type)。您可以在 appilcation.properties
文件中设置这些属性,如下所示。
# MULTIPART (MultipartProperties)
spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0B # Threshold after which files are written to disk.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size.
spring.servlet.multipart.max-request-size=10MB # Max request size.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.
我花了好几天时间让 Spring 启动上传文件正常工作,但是,与 Spring 一样,你不知道魔法是如何工作的,甚至在使用这个框架多年之后 -你必须 google 很多次才能弄清楚哪里出了问题,解决问题就像走迷宫一样,这是可维护性的噩梦。
使用Spring Boot 2.2.0.M3 进行文件上传 2 对设置有什么区别?哪个是对的?
spring.http.multipart.max-file-size=-1
spring.http.multipart.max-request-size=-1
上面的"http"和SpringREST控制器方法一起使用就是这样的... @GetMapping("/文件/{文件名:.+}") @ResponseBody public ModelAndView yourMethod(.....) 或者这根本不需要并且是一个完整的红鲱鱼,下面的设置为大于 REST http 或 Servlet 请求的默认值 1MB 的文件完成所有工作。
spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1
上传异常
超过最大上传大小;嵌套异常是 java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: 字段文件超出其最大允许大小 1048576 字节。
他们更改了不同版本的 属性 名称。
Spring 启动 1.3.x 及更早版本
multipart.max-file-size
multipart.max-request-size
Spring启动后 1.3.x:
spring.http.multipart.max-file-size=-1
spring.http.multipart.max-request-size=-1
在 Spring Boot 2.0 之后:
spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1
max-file-size Vs max-request-size
spring.servlet.multipart.max-file-size = 2MB
上传支持的每个文件的最大大小为 2MB;
同时支持MB或KB后缀; 默认 1MB
spring.servlet.multipart.max-request-size=10MB
整个请求的最大大小为 10MB;
也支持MB或KB后缀
对于无限的上传文件大小,设置-1
似乎会使文件大小无限。
更新:
您不需要在控制器级别指定任何 spring.** property
(在某些情况下期望 headers Content-Type)。您可以在 appilcation.properties
文件中设置这些属性,如下所示。
# MULTIPART (MultipartProperties)
spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0B # Threshold after which files are written to disk.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size.
spring.servlet.multipart.max-request-size=10MB # Max request size.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.