Spring Boot上傳檔案出錯,Required request part fileis not present
先上程式碼:
@RestController
@RequestMapping("/file")
//@PreAuthorize(“hasAuthority(ROLE_USER)”)
public class FileController {
/** * 提取檔案上傳的公用程式碼 * * @param uploadDir //檔案儲存路徑 * @param file //要上傳的檔案 */ private void executeUpload(String studentId, String uploadDir, MultipartFile file) { //檔案字尾名 String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); //上傳檔名
// String fileName = UUID.randomUUID() + suffix;
//檔名為當前日期,如2018101310243010(2018年10月13日10時24分。。。),再加上studentId
String fileName = DateUtil.convert2String(new Date()) + studentId + suffix;
//伺服器端儲存的檔案物件
File serverFile = new File(uploadDir + fileName);
//將上傳的檔案寫入到伺服器端檔案內
try {
file.transferTo(serverFile);
} catch (IOException e) {
e.printStackTrace();
}
}
/** * 單檔案上傳 * * @param request * @param file 前臺上傳的檔案物件 * @return */ @PostMapping("/fileupload") @ResponseBody public String upload(Map map, HttpServletRequest request, HttpServletResponse response, @RequestParam("file")MultipartFile file) { try { String id = (String) map.get("id"); //上傳目錄地址 String uploadDir = request.getSession().getServletContext().getRealPath("/") + "/upload/"; //如果目錄不存在,自動建立目錄 File dir = new File(uploadDir); if (!dir.exists()) { dir.mkdir(); } //呼叫上傳方法 executeUpload(id, uploadDir, file); } catch (Exception e) { //列印錯誤堆疊資訊 e.printStackTrace(); return "上傳失敗"; } return "上傳成功"; }
}
今天使用postman來測試檔案上傳的時候,總是報“Required request part ‘file’ is not present”的錯誤,查閱了很多資料也還是無法解決這個問題。突然想到@RequestParam(“file”)MultipartFile file中RequestParam需要的引數是“file”,那我在postman中指定檔案的key為“file”,來測試一下,發現竟然成功了!!到這裡我就想去查一下註解RequestParam的作用。
@RequestParam是傳遞引數的.
@RequestParam用於將請求引數區資料對映到功能處理方法的引數上。
public String queryUserName(@RequestParam String userName)
在url中輸入:localhost:8080/**/?userName=zhangsan
請求中包含username引數(如/requestparam1?userName=zhang),則自動傳入。
接下來我們看一下@RequestParam註解主要有哪些引數:
value:引數名字,即入參的請求引數名字,如username表示請求的引數區中的名字為username的引數的值將傳入;
required:是否必須,預設是true,表示請求中一定要有相應的引數,否則將報404錯誤碼;
defaultValue:預設值,表示如果請求中沒有同名引數時的預設值,預設值可以是SpEL表示式,如“#{systemProperties[‘java.vm.version’]}”。
之前我在上傳檔案的時候指定的key與@RequestParam中要求的不一致,導致了後臺不能獲取到上傳的檔案。