Spring将MultipartFile转存到本地磁盘的三种方式
更新时间:2024年10月14日 09:38:26 作者:当归1024
在Java中处理文件向来是一种不是很方便的操作,然后随着Spring框架的崛起,使用Spring框架中的MultipartFile来处理文件也是件很方便的事了,今天就给大家介绍Spring将MultipartFile转存到本地磁盘的方式,需要的朋友可以参考下
两者的区别和联系
- MultipartFile是spring的一部分,File则是java的标准类
- MultipartFile用于接收web传递的文件,File操作本地系统的文件
MultipartFile 转换File的三种方式
- 使用MultipartFile 自带的transferTo方法
- 使用java自带的FileOutPutStream流
- 使用java自带的NIO方法
transferTo保存

代码
参数:目标文件的绝对路径
/**
* 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 {
// 设置文件存储路径
String uploadFolder = UPLOAD_FOLDER;
// 判断文件夹是否存在,不存在则创建
File folder = new File(uploadFolder);
if (!folder.exists()) {
folder.mkdirs();
}
// 获取文件名
String fileName = file.getOriginalFilename();
// 设置文件存储路径
File targetFile = new File(uploadFolder + File.separator + fileName);
// 保存文件
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
return "Upload successfully!";
}
测试
借助apifox工具测试,MutipartFile 选择body


测试结果:同时创建了文件夹和文件

使用原生的FileOutputStream保存文件
- 创建 FileOutputStream流
- 将MultipartFile 文件转换为字节数组输入到FileOutputStream流中,保存文件
/**
* 使用原生的FileOutputStream保存文件
*/
@PostMapping("/upload2")
public String upload2(@RequestParam("file") MultipartFile file) {
// 判断文件是否为空
if (file.isEmpty()) {
return "File is empty!";
}
try {
// 设置文件存储路径
String uploadFolder = UPLOAD_FOLDER;
// 判断文件夹是否存在,不存在则创建
File folder = new File(uploadFolder);
if (!folder.exists()) {
folder.mkdirs();
}
// 获取文件名
String fileName = file.getOriginalFilename();
// 设置文件存储路径
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复制文件
使用Files工具类的copy方法,三个参数:源文件的输入流、目标文件的文件夹特殊操作:REPLACE_EXISTING的作用是 若存在则替换
/**
* 使用原生的NIO复制保存文件
*/
@PostMapping("/upload3")
public String upload3(@RequestParam("file") MultipartFile file) {
// 判断文件是否为空
if (file.isEmpty()) {
return "File is empty!";
}
try {
// 设置文件存储路径
String uploadFolder = UPLOAD_FOLDER;
// 判断文件夹是否存在,不存在则创建
File folder = new File(uploadFolder);
if (!folder.exists()) {
folder.mkdirs();
}
// 获取文件名
String fileName = file.getOriginalFilename();
// 设置文件存储路径
File targetFile = new File(uploadFolder + File.separator + fileName);
// 保存文件 使用原生的NIO复制保存文件
Files.copy(file.getInputStream(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
e.printStackTrace();
return "Upload failed!";
}
return "Upload successfully!";
}
以上就是Spring将MultipartFile转存到本地磁盘的方式的详细内容,更多关于Spring MultipartFile转存到磁盘的资料请关注脚本之家其它相关文章!
相关文章
解决javac不是内部或外部命令,也不是可运行程序的报错问题
在学着使用Java的命令行来编译java文件的时候,遇到了这个问题,本文主要介绍了解决javac不是内部或外部命令,也不是可运行程序的报错问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-04-04
一文搞懂Spring中@Autowired和@Resource的区别
@Autowired 和 @Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见的面试题之一,所以我们今天就来盘它2022-08-08
SpringCloud使用集中配置组件Config规避信息泄露
项目应用中,数据库连接信息、Access-key、Secret-key等由于其及其敏感和特殊性,一旦泄露出去就很可能会使得应用遭到黑客攻击,例如数据库账号密码泄露可能导致“拖库”,甚至数据丢失。此等事件偶有发生,那么,在分布式微服务项目中,怎么避免这种情况呢2022-07-07


最新评论