Spring將MultipartFile轉(zhuǎn)存到本地磁盤的三種方式
兩者的區(qū)別和聯(lián)系
- MultipartFile是spring的一部分,F(xiàn)ile則是java的標(biāo)準(zhǔn)類
- MultipartFile用于接收web傳遞的文件,F(xiàn)ile操作本地系統(tǒng)的文件
MultipartFile 轉(zhuǎn)換File的三種方式
- 使用MultipartFile 自帶的transferTo方法
- 使用java自帶的FileOutPutStream流
- 使用java自帶的NIO方法
transferTo保存

代碼
參數(shù):目標(biāo)文件的絕對路徑
/**
* Upload file 使用MultipartFile接收文件 transferTo方法保存文件
* @param file file
* @return
*/
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
// 判斷文件是否為空
if (file.isEmpty()) {
return "File is empty!";
}
try {
// 設(shè)置文件存儲路徑
String uploadFolder = UPLOAD_FOLDER;
// 判斷文件夾是否存在,不存在則創(chuàng)建
File folder = new File(uploadFolder);
if (!folder.exists()) {
folder.mkdirs();
}
// 獲取文件名
String fileName = file.getOriginalFilename();
// 設(shè)置文件存儲路徑
File targetFile = new File(uploadFolder + File.separator + fileName);
// 保存文件
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
return "Upload successfully!";
}
測試
借助apifox工具測試,MutipartFile 選擇body


測試結(jié)果:同時創(chuàng)建了文件夾和文件

使用原生的FileOutputStream保存文件
- 創(chuàng)建 FileOutputStream流
- 將MultipartFile 文件轉(zhuǎn)換為字節(jié)數(shù)組輸入到FileOutputStream流中,保存文件
/**
* 使用原生的FileOutputStream保存文件
*/
@PostMapping("/upload2")
public String upload2(@RequestParam("file") MultipartFile file) {
// 判斷文件是否為空
if (file.isEmpty()) {
return "File is empty!";
}
try {
// 設(shè)置文件存儲路徑
String uploadFolder = UPLOAD_FOLDER;
// 判斷文件夾是否存在,不存在則創(chuàng)建
File folder = new File(uploadFolder);
if (!folder.exists()) {
folder.mkdirs();
}
// 獲取文件名
String fileName = file.getOriginalFilename();
// 設(shè)置文件存儲路徑
File targetFile = new File(uploadFolder + File.separator + fileName);
// 保存文件 使用原生的FileOutputStream保存文件
try(FileOutputStream fileOutputStream = new FileOutputStream(targetFile)) {
fileOutputStream.write(file.getBytes());
}
} catch (Exception e) {
e.printStackTrace();
return "Upload failed!";
}
return "Upload successfully!";
}
NIO復(fù)制文件
使用Files工具類的copy方法,三個參數(shù):源文件的輸入流、目標(biāo)文件的文件夾特殊操作:REPLACE_EXISTING的作用是 若存在則替換
/**
* 使用原生的NIO復(fù)制保存文件
*/
@PostMapping("/upload3")
public String upload3(@RequestParam("file") MultipartFile file) {
// 判斷文件是否為空
if (file.isEmpty()) {
return "File is empty!";
}
try {
// 設(shè)置文件存儲路徑
String uploadFolder = UPLOAD_FOLDER;
// 判斷文件夾是否存在,不存在則創(chuàng)建
File folder = new File(uploadFolder);
if (!folder.exists()) {
folder.mkdirs();
}
// 獲取文件名
String fileName = file.getOriginalFilename();
// 設(shè)置文件存儲路徑
File targetFile = new File(uploadFolder + File.separator + fileName);
// 保存文件 使用原生的NIO復(fù)制保存文件
Files.copy(file.getInputStream(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
e.printStackTrace();
return "Upload failed!";
}
return "Upload successfully!";
}
以上就是Spring將MultipartFile轉(zhuǎn)存到本地磁盤的方式的詳細(xì)內(nèi)容,更多關(guān)于Spring MultipartFile轉(zhuǎn)存到磁盤的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java將數(shù)組轉(zhuǎn)換成字符串的四種方法總結(jié)
springboot整合spring-retry的實(shí)現(xiàn)示例
idea2023創(chuàng)建JavaWeb教程之右鍵沒有Servlet的問題解決
全面解析SpringBoot自動配置的實(shí)現(xiàn)原理
SpringBoot?2.x整合Log4j2日志的詳細(xì)步驟
Spring配置多數(shù)據(jù)源導(dǎo)致事物無法回滾問題
詳解如何將已有項(xiàng)目改造為Spring Boot項(xiàng)目
SpringMVC 重定向參數(shù)RedirectAttributes實(shí)例

