天天看點

檔案上傳報錯:Current request is not a multipart request的解決辦法

1.問題現象

    寫在檔案上傳接口時,傳入參數有MultipartFile檔案和其他類型參數,如圖所示。

檔案上傳報錯:Current request is not a multipart request的解決辦法

    結果前端調用時報錯org.springframework.web.multipart.MultipartException: Current request is not a multipart request,并且發現orgId參數是會拼接到url中的,顯然沒有一起傳入。

2.問題分析

    顯然從報錯資訊來說,是因為使用springboot制作excel表格上傳時候報錯,上傳檔案用的Content-Type應該是multipart/form-data,于是前端在接口content-type設定為application/json,上傳檔案接口測試去掉content-type屬性或content-type設定為multipart/form-data。但是發現仍然報相同的錯誤。于是上網查了一下各種解決思路,比如把MultipartFile檔案參數放在第一個,發現還是沒有用。

3.解決辦法

3.1 将檔案和其他參數封裝起來再傳入

    正在我百思不得其解的時候,發現orgId參數是會拼接到url中的,顯然沒有一起傳入。于是考慮将兩個不同格式的參數封裝到實體類中傳入。

import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

@Data
public class ImportUser {
    private MultipartFile file;
    private String orgId;
}
           
public ResponseBean ImportUsers(@RequestBody ImportUser importUser,HttpServletRequest request) throws Exception{

}
           

    結果發現沒有報錯,問題解決了。

3.2 不指定傳入參數格式

    但如果我不想每次上傳檔案都通過傳入實體類的方法,于是考慮不指定參數格式傳入。那就不去掉前面注解試試看。

public ResponseBean ImportUsers(MultipartFile file,String orgId,HttpServletRequest request) throws Exception {

}
           

    發現依然沒有報錯了,說明不加注解的方法也可以解決問題。