我正在使用带有CommonsMultipartResolver
的Spring Boot 1.1.3来允许一次上传多个文件。
当我尝试上传大于1 MB的文件时,我得到了这个堆栈跟踪:
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException:
The field files[] exceeds its maximum permitted size of 1048576 bytes.
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl$1.raiseError(FileUploadBase.java:637)
at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:76)
at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:135)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
我尝试设置这样的最大上传大小:
public MultipartResolver multipartResolver()
{
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setMaxUploadSize( 100 * MEGABYTE_IN_BYTES );
return resolver;
}
然而,这不起作用。我找到了这个Spring guide on upoading files并在那里使用MultipartConfigFactory
代替。但是,我现在需要在我的控制器中使用MultipartFile
类而不是MultipartHttpServletRequest
。
使用MultipartHttpServletRequest
我可以getFileMap()
获取所有文件,但MultipartFile
上没有此类方法。
有关如何使用MultipartConfigFactory
和多个文件的任何想法?我在客户端上使用jquery-file-upload,如果这很重要的话。
答案 0 :(得分:7)
增加上传限制的正确方法是设置属性
multipart.maxFileSize=10Mb
在application.properties
文件中。您可以在此处详细了解此主题
https://stackoverflow.com/a/27062232/668417
和这里
MultipartProperties.java
答案 1 :(得分:3)
有关Spring Boot 1.1.3的问题。随着时间的推移,已接受的解决方案不再适用于较新版本的Spring Boot。但是,增加最大允许上载大小的问题仍然存在。
我从Spring Boot 1.4.2开始写这个,所以这个解决方案可能永远不正确。
从春季指南到uploading files,新属性就是:
spring.http.multipart.max-file-size=10Mb
spring.http.multipart.max-request-size=10Mb
答案 2 :(得分:1)
似乎无需在Controller中使用MultipartFile
,您也可以使用MultipartHttpServletRequest
。这是我的@RestController
注释类的签名:
@RequestMapping(value = "/{datasheetId}/addDoc", method = RequestMethod.POST)
@Secured(ROLE_USER)
public ResponseEntity<?> addDocumentToDatasheet( Principal principal,
@PathVariable("datasheetId") long datasheetId,
MultipartHttpServletRequest request ) throws IOException
{
Map<String, MultipartFile> fileMap = request.getFileMap();
// handle fileMap further...
}
答案 3 :(得分:1)
对于我的项目中的大小问题,我在application.properties中使用了这个属性:
multipart.max-file-size=100Mb
multipart.max-request-size=100Mb
对于有多个文件的情况我建议使用像这样的bean
@Data
class MultipartDTO{
private MultipartFile file1;
private MultipartFile file2;
.....
private MultipartFile filen;
//eventually other proerties
}
当然,在你的控制器中,你的colud有这样的东西
@RequestMapping(value = "/multipartUrl", method = RequestMethod.POST, consumes = "multipart/form-data")
public ResponseEntity multipartCall(MultipartDTO multipartDTO){
....
}
我希望这可以帮到你