一、概念
1. MultipartFile為org.springframework.web.mutipart包下的一個類,是一個接口,並繼承自InputStreamSource,即可將MultipartFile格式的文件轉換為輸入流。源碼解釋:文件內容存儲在內存中或臨時存儲在磁盤上。在任何一種情況下,如果需要,用戶負責將文件內容復制到會話級或持久性存儲。臨時存儲將在請求處理結束時清除。
2.方法
multipartFile.getName():獲取的是前后端約定的傳入文件的參數的名稱;
multipartFile.getOriginalFileName():返回客戶端系統中原始文件名;
multipartFile.getBytes():用來將文件轉換成一種字節數組返回,會拋出IOException異常;
multipartFile.getInputStream():用來將文件轉換成輸入流的形式來傳輸文件,會拋出IOException異常;
multipartFile.transferTo(java.io.File dest):將接收文件傳輸到給定目標路徑;
multipartFile.getSize():用來獲取文件的大小,單位是字節;
multipartFile.getContentType():獲取的是文件的類型,注意是文件的類型,不是文件的拓展名;
multipartFile.isEmpty():用來判斷傳入的文件是否為空,如果為空則表示沒有傳入任何文件;
二、應用
案例
@PostMapping("/uploadFile") public String uploadImg(@RequestParam("file") MultipartFile file, @RequestParam("equipmentId") String equipmentId) { String baseDir = "./imgFile"; // 這里不能直接使用相對路徑 if (!file.isEmpty()) { String name = file.getOriginalFilename(); String prefix = name.lastIndexOf(".") != -1 ? name.substring(name.lastIndexOf(".")) : ".jpg"; String path = UUID.randomUUID().toString().replace("-", "") + prefix; try { // 這里代碼都是沒有問題的 File filePath = new File(baseDir, path); // 第一次執行代碼時,路徑是不存在的 logger.info("文件保存路徑:{},是否存在:{}", filePath.getParentFile().exists(), filePath.getParent()); if (!filePath.getParentFile().exists()) { // 如果存放路徑的父目錄不存在,就創建它。 filePath.getParentFile().mkdirs(); } // 如果路徑不存在,上面的代碼會創建路徑,此時路徑即已經創建好了 logger.info("文件保存路徑:{},是否存在:{}", filePath.getParentFile().exists(), filePath.getParent()); // 此處使用相對路徑,似乎是一個坑! // 相對路徑:filePath // 絕對路徑:filePath.getAbsoluteFile() logger.info("文件將要保存的路徑:{}", filePath.getPath()); file.transferTo(filePath); logger.info("文件成功保存的路徑:{}", filePath.getAbsolutePath()); return "上傳成功"; } catch (Exception e) { logger.error(e.getMessage()); } } return "上傳失敗"; }