春季上传文件大小限制错误

时间:2018-07-18 20:31:59

标签: java spring spring-boot tomcat spring-restcontroller

我正在使用Spring Boot,并且可以发送小于1MB的图像,但是当我发出具有大于1MB的大图像的发布请求时,出现此错误:

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.

我一直到处寻找很多地方来尝试找到此错误的答案。我查看了所有这些问题,并尝试实施它们的建议,但无济于事:I am trying to set maxFileSize but it is not honoredorg.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededExceptionMax Limit of MultipartFile in spring boot和{{3}}

我正在使用Spring 2.0.3版,这是我的帖子映射:

    @PostMapping("/post")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
      String message = "";
      try {
        storageService.store(file);
        files.add(file.getOriginalFilename());

        message = "You successfully uploaded " + file.getOriginalFilename() + "!";
        return ResponseEntity.status(HttpStatus.OK).body(message);
      } catch (Exception e) {
      message = "FAIL to upload " + file.getOriginalFilename() + "!";
      return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(message);
  }

}

这是我尝试过的所有application.properties配置:

1

spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1

2

spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=5MB

3

spring.http.multipart.max-file-size=5MB
spring.http.multipart.max-request-size=5MB

4

multipart.max-file-size=5MB
multipart.max-request-size=5MB

5

server.tomcat.max-file-size=5000000

6

server.tomcat.max-http-post-size=5000000

7

spring.servlet.multipart.maxFileSize=-1
spring.servlet.multipart.maxRequestSize=-1

甚至尝试将其更改为application.yml:

spring:
  servlet:
    multipart:
      max-file-size: 5MB
      max-request-size: 5MB

我还研究了更改Tomcat在web.xml文件中允许的请求大小,但是我没有web.xml文件。我正在使用的Tomcat捆绑在应用程序中。

6 个答案:

答案 0 :(得分:3)

application.properties 中为Spring Boot版本 2.0.0.RELEASE及更高版本-

添加以下行
spring.servlet.multipart.max-file-size=128MB
spring.servlet.multipart.max-request-size=128MB
spring.servlet.multipart.enabled=true

请注意较低版本,即 1.5.9.RELEASE及以下版本,其配置如下:

spring.http.multipart.max-file-size = 20MB
spring.http.multipart.max-request-size = 20MB

答案 1 :(得分:0)

这就是我所拥有的,它对于后端非常适合我。

@PutMapping(value = USER_PROFILE_UPDATE_URL_MAPPING)
  public String updateProfile(
      @ModelAttribute(AUTHORIZED_USER_MODEL_KEY) User user,
      BindingResult bindingResult,
      @RequestParam(name = "file") MultipartFile multipartFile,
      Model model, @RequestParam Map<String, String> params) {

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    User authorizedUser = (User) authentication.getPrincipal();
    //.... 

      return REDIRECT_TO_LOGIN;
    }

在bootstrap.yml文件中,我将简单地得到如下内容... 这将只允许2 MB的最大文件大小。

---
spring:
  servlet:
    multipart:
      max-file-size: 2MB
      max-request-size: 2MB

最后,在我的HTML文件中,我将得到类似这样的内容...

<form id="profileForm"
   th:action="@{/update}"
   th:object="${user}"
   method="post" enctype="multipart/form-data">

   <!-- This will modify the method to PUT to match backend -->
   <input type="hidden" name="_method" value="PUT">

   ...

   <div class="col-md-3">
      <div class="form-group row">
         <label for="file" class="custom-file">
           <input name="file" type="file" id="file" aria-describedby="fileHelpId"  class="form-control-file btn btn-outline-info">
          </label>
          <small id="fileHelpId" class="form-text text-muted">Maximum size should be 2MB</small>
       </div>
   </div>

这应该工作得很好。我也在使用Spring Boot 2.0.3

答案 2 :(得分:0)

您尝试过吗?

spring.http.multipart.maxFileSize = 20MB
spring.http.multipart.maxRequestSize = 20MB

OR

spring.http.multipart.max-file-size = 20MB
spring.http.multipart.max-request-size = 20MB

使用Spring Boot 1.5.x为我工作

答案 3 :(得分:0)

按照下面的最新Spring Boot Common properties,应该可以使用

MULTIPART(MultipartProperties)

spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0 # Threshold after which files are written to disk. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.max-request-size=10MB # Max request size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.

或者如果您只想控制多部分属性,则multipart.max-file-sizemultipart.max-request-size属性应该起作用。

multipart.max-file-size=5MB
multipart.max-request-size=5MB

答案 4 :(得分:0)

取决于application.properties上的Spring boot Version示例1.X,设置文件大小限制:

spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

Spring Boot 2.x /或更高版本:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

答案 5 :(得分:0)

This worked for me.
We can make changes to file size either in
1. application.properties 2. TOMCAT configuration(server.xml)

A. Ideally we should make use of application.properties 
B. And for that first we need to disable in TOMCAT config file "server.xml" by setting maxSwallowSize=-1 .

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

C. Then set application.properties as

spring.servlet.multipart.max-file-size=15MB
spring.servlet.multipart.max-request-size=15MB
spring.servlet.multipart.enabled=true