一、概念
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 "上傳失敗";
}
