web-dev-qa-db-ja.com

春アップロードファイルサイズ制限エラー

私は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.

私は、このエラーの答えを見つけるために、非常に多くの場所を探しています。私はこれらの質問をすべて見て、それらが役に立たないものを実装しようとしました: Spring upload file size limit私はmaxFileSizeを設定しようとしていますが、それは尊重されませんorg.Apache.Tomcat.util.http.fileupload.FileUploadBase $ FileSizeLimitExceededException 、および スプリングブートでのMultipartFileの最大制限

私は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

Web.xmlファイルでTomcatで許可されるリクエストサイズの変更も検討しましたが、web.xmlファイルがありません。私が使用しているTomcatはアプリにバンドルされています。

6
Ryan Fasching

Spring Bootバージョンのapplication.propertiesに以下の行を追加します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
13
vikash singh

最新の 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-sizeおよびmultipart.max-request-sizeプロパティが機能するはずです。

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

これを試しましたか?

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で動作します

0
T.Rex

これは私が持っているものであり、バックエンドにとっては完璧に機能します。

@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メガバイトしか許可されません。

---
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も使用しています

0
Knight Rider