我想在我的Spring Boot應用程序中實現上傳處理程序方法。我想使用CommonsMultipartResolver
而不是StandardServletMultipartResolver
。我有以下問題:當我在Spring Boot應用程序中使用CommonsMultipartResolver時,MultipartFile爲null
我的控制器方法參數(文件)始終設置爲空。我在HiddenHttpMethodFilter
的java文檔中看到: 由於其內部需要檢查POST主體參數,所以此過濾器在多部分POST請求的情況下需要在多部分處理後運行。
我試圖設置multipartFilter bean的順序,但它沒有幫助。當我調試時,我看到HiddenHttpMethodFilter
總是在MultipartFilter
之前調用。我正在使用Spring Boot版本1.3.0.RELEASE和基於Java的配置。我該如何設置HiddenHttpMethodFilter
之後的訂單MultipartFilter
?
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setMaxUploadSizePerFile(52428800);
return resolver;
}
@Bean
@Order(0)
public MultipartFilter multipartFilter() {
MultipartFilter multipartFilter = new MultipartFilter();
multipartFilter.setMultipartResolverBeanName("multipartResolver");
return multipartFilter;
}
@RequestMapping(value = "/{userId}", method = RequestMethod.POST)
@ResponseBody
public FileTransport create(@PathVariable("userId") Long userId,
MultipartFile file) throws IOException {
//return fileService.create(userId, file);
return new FileTransport();
}
如果我修改的方法,包括像下面請PARAM:
@RequestParam(NAME = 「文件」,要求= TRUE)MultipartFile文件
它拋出一個異常:「必MultipartFile參數'文件'不存在'。
如果我使用StandardServletMultipartResolver
,一切都按預期工作。
正如[在GitHub上討論](https://github.com/spring-projects/spring-boot/issues/2958#issuecomment-227536841),您的'MultipartFilter'的順序是錯誤的。它需要小於-10000的'HiddenHttpMethodFilter'的順序。如果這沒有幫助,你能提供一個[最小,完整,可驗證的例子](http://stackoverflow.com/help/mcve)? –
@AndyWilkinson HiddenHttpMethodFilter的順序不是-10000,而是HIGHEST_PRECEDENCE + 10。但是,即使你將MultipartFilter設置爲超前,上傳失敗,這次使用'java.io.IOException:缺少多部分請求的內容 \t at org.eclipse.jetty.server.Request.extractMultipartParameters(Request.java:390 )'。 CommonsMultipartResolver是否與Spring Boot兼容? – kpentchev
@AndyWilkinson彈簧啓動版本是1.2.8。 – kpentchev