今天在spring 4.1.7 中嘗試 multipart/form-data 的方式上傳文本和文件混合數據,服務器老報錯,說請求中並沒有提供XXX字段(服務端配置的@RequestPart綁定)。
調試客戶端multipart格式,甚至用 html頁面,通過瀏覽器提交都不行。後來將 @RequestPart 換成 @RequestParam 就好了。之後查閱官方示例,也是用的後者。
https://spring.io/guides/gs/uploading-files/
後來發現字符串數據可以接收到,但文件上傳,又解析不出來,猜測可能是 multipart resolver 出了問題,一路調試,發現 servlet request中是有上傳的文件信息的。檢查 application.properties 文件,發現已經啓用了multipart:
multipart.enabled=true
multipart.max-file-size=10MB
於是刪除java 配置中的
@Bean
public CommonsMultipartResolver getMultipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setMaxUploadSize( 1024 * 1024 * 5 );
resolver.setMaxInMemorySize( 1024 * 1024 );
resolver.setDefaultEncoding( “UTF-8” );
return resolver;
}
然後就奇蹟般的好了。猜測是spring 自己會初始化並裝配 CommonsMultipartResolver,自己裝配反而丟失了一些配置,具體還需研究。