Required request part 'myFile' is not present
所需的請求部分“myFile”不存在
開發環境:Java,Maven,Spring
問題描述:我仔細的盯着前端編寫的表單還有后端接收的參數后,發現我並沒有寫錯參數名稱,按道理應該可以獲取到所謂的“myFile”參數。問題相關代碼如下:
</form>
<h1>文件上傳</h1>
<form action="/file/upload.demo" method="post" enctype="multipart/form-data">
請選擇文件:<input type="file" name="myFile"/><br>
<button type="submit">上傳文件</button>
</form>
@Controller
@RequestMapping("file")
public class FileUploadController {
@RequestMapping(value = "upload.demo",method = RequestMethod.POST)
public String upload(@RequestParam("myFile") MultipartFile file, HttpServletRequest req) throws IOException {
String originalFilename = file.getOriginalFilename();
System.out.println("originalFilename = " + originalFilename);
String randomPrefix = UUID.randomUUID().toString().replace("-", "");
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String dirPath = req.getServletContext().getRealPath("/upload-files");
String savePath = dirPath + "\\" + randomPrefix + suffix;
//文件存儲到服務器
file.transferTo(new File(savePath));
System.out.println("upload success ! savePath = " + savePath);
return "jsp-view/ok";
}
}
於是上網查找了相關問題,有人說用spring boot不要在容器配置文件中聲明CommonsMultipartResolver的bean實例。
結合我自己的情況,我使用的是spring mvc,確實在容器中聲明了這個對象
<bean id="commonsMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
- 於是我直接注釋掉了這個bean重新啟動項目,發現報錯沒有改變
思考了一下最終解決了,問題還是出在這個bean上
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
把id改為multipartResolver后就可以!
推測原因是spring mvc是自動調用名為multipartResolver的對象,所以必須使用這個名稱。
至於為什么起這個名稱大概是因為容器是按照MultipartResolver這個接口來調用此對象的。
目前初學spring所以不想看源碼,如果有知道的朋友可以告訴我鴨~