在使用spring boot做上傳檔案的功能, 前端使用的jquery 配合ajax去送出,背景使用springmvc mulitpartFile 去接受檔案,發現檔案一直擷取不到,一直為null,嘗試了各種前端解決方法,背景加了@requestparam, @requestbody 等都還是無法擷取到檔案,在各種嘗試後,決定關掉過濾器,發現接受到了,我的過濾器裡面過濾了*.do 這種路徑請求,難道也會過濾檔案?
現在還是個疑惑。。 于是嘗試不關掉過濾器也能上傳檔案,多次嘗試後,加了一個配置 就可以了,這個用的第三方的檔案解析器, 記錄一次爬坑經曆
前端代碼:
<form id="fileUploadForm" enctype="multipart/form-data" method="post" οnsubmit="return false">
<input id ="img" type="file" name="img"/><br/><br/>
<input type="submit" value="Submit" id="btnSubmit" οnclick="test1()"/>
</form>
function test1() {
var form = new FormData(document.getElementById("fileUploadForm"));
$.ajax({
type: "POST",
url:"/api/v1/testFile.do",
data:form,
processData: false,
contentType: false,
success: function (data) {
alert("success");
}
})
}
後端代碼:
@RestController
public class TestFileController {
private Logger log = LoggerFactory.getLogger(TestFileController.class);
@PostMapping("/api/v1/testFile")
public JsonData uploadFile( @RequestParam("img") MultipartFile img) {
log.info("username-->" + "-" + img.getOriginalFilename());
return JsonData.buildSuccess();
}
}
springboot新增配置:
@Configuration
public class UploadConfig {
//顯示聲明CommonsMultipartResolver為mutipartResolver
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
//resolveLazily屬性啟用是為了推遲檔案解析,以在在UploadAction中捕獲檔案大小異常
resolver.setResolveLazily(true);
resolver.setMaxInMemorySize(40960);
//上傳檔案大小 5M 5*1024*1024
resolver.setMaxUploadSize(5 * 1024 * 1024);
return resolver;
}
}