1. 程式人生 > >Spring Boot上傳檔案出錯,Required request part fileis not present

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中要求的不一致,導致了後臺不能獲取到上傳的檔案。