spring 如何将mutipartFile转存到本地磁盘
两者的区别和联系
MutipartFile
是spring
的一部分,File
则是java
的标准类MutipartFile
用于接收web传递
的文件,File
操作本地系统
的文件
MutipartFile 转换File的三种方式
- 使用MutipartFile 自带的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!";}