org.springframework.web.multipart.MaxUploadSizeExceededException: 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. at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:121) at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:114)
從上述異常可以看出,是因為上傳的file檔案超過了spring預設配置的最大值1048576 bytes,上傳檔案我們通常情況下是使用MultipartFile介面類接收前端上傳的文件,可見MultipartFile文件的預設限制也是1048576 bytes,即1M。
但是很多情況下我們用手機直接拍攝的證件照或是文件問阿金基本上都是在2M以上,很顯然這不能滿足我們的日常需求,所以我們就要修改預設配置參數大小。
SpringBoot不同的版本,對應的設定參數不同:
Spring Boot 1.3.x and earlier
multipart.maxFileSize
multipart.maxRequestSize
Spring Boot 1.4.x and 1.5 .x
spring.http.multipart.maxFileSize
spring.http.multipart.maxRequestSize
#Spring Boot 2.x
spring.servlet.multipart.maxFileSize
spring.servlet.multipart .maxRequestSize
#例如我使用的是SpringBoot 2.1.3的版本,然後直接再設定檔中設定參數大小:
#做限制的参数配置 spring: servlet: multipart: enabled: true #默认支持文件上传 max-file-size: 20MB # 最大支持文件大小 max-request-size: 30MB # 最大支持请求大小 #不做限制的参数配置 spring: servlet: multipart: enabled: true #默认支持文件上传 max-file-size: -1 #不做限制 max-request-size: -1 #不做限制
設定完重啟項目即可成功上傳檔案。
將參數配置在遠端設定檔中心,如果是設定專案中的設定檔中,那就跟方法1一樣了,就沒必要再單獨寫配置類別了,將參數配置在遠端配置中心,就是為了可以根據臨時需求動態修改參數,而不用重啟項目。
常見的遠端設定檔中心服務有Nacos、Apollo(阿波羅)、SpringCloud等等,我使用的是Nacos配置中心服務:
自訂MultipartFileConfig設定類別:
import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.unit.DataSize; import javax.servlet.MultipartConfigElement; /** * @author: 一宿君 * @date: 2022-03-23 19:18:51 * @description: */ @Configuration public class MultipartFileConfig { @Value("${config.multifile.maxFileSize}") private Long maxFileSize; @Value("${config.multifile.maxRequestSize}") private Long maxRequestSize; @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); /** * 单个数据大小, * DataSize.ofMegabytes(maxFileSize)默认是配置字节,将字节转化为MB */ factory.setMaxFileSize(DataSize.ofMegabytes(maxFileSize)); // 总上传数据大小 factory.setMaxRequestSize(DataSize.ofMegabytes(maxRequestSize)); return factory.createMultipartConfig(); } }
這樣就可以隨時控制上傳檔案的大小了!
以上是SpringBoot上傳檔案大小受限問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!