天天看點

springboot 上傳檔案 中過濾器配置*.do字尾 無法上傳的問題

      在使用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;
    }

}
      

繼續閱讀