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è)置文件存儲(chǔ)路徑
String uploadFolder = UPLOAD_FOLDER;
// 判斷文件夾是否存在,不存在則創(chuàng)建
File folder = new File(uploadFolder);
if (!folder.exists()) {
folder.mkdirs();
}
// 獲取文件名
String fileName = file.getOriginalFilename();
// 設(shè)置文件存儲(chǔ)路徑
File targetFile = new File(uploadFolder + File.separator + fileName);
// 保存文件
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
return "Upload successfully!";
}
測試
借助apifox工具測試,MutipartFile 選擇body


測試結(jié)果:同時(shí)創(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è)置文件存儲(chǔ)路徑
String uploadFolder = UPLOAD_FOLDER;
// 判斷文件夾是否存在,不存在則創(chuàng)建
File folder = new File(uploadFolder);
if (!folder.exists()) {
folder.mkdirs();
}
// 獲取文件名
String fileName = file.getOriginalFilename();
// 設(shè)置文件存儲(chǔ)路徑
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方法,三個(gè)參數(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è)置文件存儲(chǔ)路徑
String uploadFolder = UPLOAD_FOLDER;
// 判斷文件夾是否存在,不存在則創(chuàng)建
File folder = new File(uploadFolder);
if (!folder.exists()) {
folder.mkdirs();
}
// 獲取文件名
String fileName = file.getOriginalFilename();
// 設(shè)置文件存儲(chǔ)路徑
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ù)據(jù)庫表名,自動(dòng)生成對應(yīng)實(shí)體類的操作
這篇文章主要介紹了利用JAVA反射,讀取數(shù)據(jù)庫表名,自動(dòng)生成對應(yīng)實(shí)體類的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
解決javac不是內(nèi)部或外部命令,也不是可運(yùn)行程序的報(bào)錯(cuò)問題
在學(xué)著使用Java的命令行來編譯java文件的時(shí)候,遇到了這個(gè)問題,本文主要介紹了解決javac不是內(nèi)部或外部命令,也不是可運(yùn)行程序的報(bào)錯(cuò)問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Java實(shí)現(xiàn)驗(yàn)證碼的產(chǎn)生和驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)驗(yàn)證碼的產(chǎn)生和驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2012-01-01
一文搞懂Spring中@Autowired和@Resource的區(qū)別
@Autowired?和?@Resource?都是?Spring/Spring?Boot?項(xiàng)目中,用來進(jìn)行依賴注入的注解。它們都提供了將依賴對象注入到當(dāng)前對象的功能,但二者卻有眾多不同,并且這也是常見的面試題之一,所以我們今天就來盤它2022-08-08
SpringCloud使用集中配置組件Config規(guī)避信息泄露
項(xiàng)目應(yīng)用中,數(shù)據(jù)庫連接信息、Access-key、Secret-key等由于其及其敏感和特殊性,一旦泄露出去就很可能會(huì)使得應(yīng)用遭到黑客攻擊,例如數(shù)據(jù)庫賬號(hào)密碼泄露可能導(dǎo)致“拖庫”,甚至數(shù)據(jù)丟失。此等事件偶有發(fā)生,那么,在分布式微服務(wù)項(xiàng)目中,怎么避免這種情況呢2022-07-07
Java讀寫pdf文件的詳細(xì)實(shí)現(xiàn)方法
最近公司的項(xiàng)目中需要操作pdf文件,所以這里給大家總結(jié)下方法,這篇文章主要給大家介紹了關(guān)于Java讀寫pdf文件的詳細(xì)實(shí)現(xiàn)方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09

