似乎無法弄清楚這一點,不管我嘗試什麼。我提交本curl命令:Spring Boot +多部件/表格數據控制器方法
curl -v -F name=countries.zip -F [email protected] http://localhost:8080/rest
我有一個春天啓動1.4應用程序用下面的方法的註釋@RestController:
@RequestMapping(consumes = {"multipart/form-data"}, method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE}, path = {"/rest", "/rest/**"})
public void handleMultipartRestApiRequest(MultipartHttpServletRequest request, HttpServletResponse response, @RequestPart(value = "filedata", required = false) MultipartFile filedata) throws Exception {
r...
}
的FILEDATA變量始終是空的,請求對象總是顯示0個文件。
我試過MultipartResolver的多個配置。這裏是我的最新消息:
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(5000000);
multipartResolver.setMaxInMemorySize(5000000);
multipartResolver.setDefaultEncoding("utf-8");
return multipartResolver;
}
我還堅持手工這些在我的application.properties公正,以確保它沒有禁用1000%:
multipart.enabled=true
spring.http.multipart.enabled =真
和良好的措施,這裏的請求頭:
* Connected to localhost (::1) port 8080 (#0)
> POST /rest HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Length: 817999
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------7d3f4606455e862b
>
任何人有一個線索,爲什麼我似乎無法看到我的控制器上的文件?
更新1:
如果我挖得足夠深,請求對象,並獲得了org.catalina.connector.Request對象,還有的含有似乎保存有關信息的DiskFileItem ApplicationPart項目的ArrayList我正在嘗試上傳的文件。這實際上是調用request.getParts()時返回的Collection。該文件的項目位置路徑是一些長期TMP的路徑:
/private/var/folders/n8/15d6vbhj0692cslf3cx8c1jm0000gn/T/tomcat.6840182548028446450.8080/work/Tomcat/localhost/myapp
但是它也說,內容類型是應用程序/八位字節流,大小爲-1,和其他一些怪事,比如「isFormField」是假的,甚至儘管我在curl命令中將它指定爲表單域。所以Spring正在調用處理多部分/表單數據請求的正確方法,但「部分」信息似乎認爲它是一個八位字節流。
我謙虛地認爲你沒有實例化你的多部分對象。像:MultipartFile filedata = fileToBeAdded.getSomething(); –
不確定你的意思...我期待在請求中的文件。如果我做了類似Map map = request.getFileMap()的東西,地圖是空的。 –
Bal
嘗試使用'@ RequestParam'而不是'@ RequestPart'。 –