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转存到磁盘的资料请关注脚本之家其它相关文章!

相关文章

  • java格式化时间示例

    java格式化时间示例

    这篇文章主要介绍了java格式化时间示例,需要的朋友可以参考下
    2014-04-04
  • Java实现添加页码到PDF文档

    Java实现添加页码到PDF文档

    页码可以清楚了解总页数、定位页数快速寻找自己所要的文段、打印时不会分不清头中尾。今天这篇文章就将介绍如何通过Java代码,以编程的方式将添加页码到PDF文档,需要的可以参考一下
    2023-04-04
  • SpringBoot Event实现异步消费机制的示例代码

    SpringBoot Event实现异步消费机制的示例代码

    这篇文章主要介绍了SpringBoot Event实现异步消费机制,ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-04-04
  • java 引用传递的三种类型小结

    java 引用传递的三种类型小结

    这篇文章主要介绍了java 引用传递的三种类型,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java 栈和队列的相互转换详解

    Java 栈和队列的相互转换详解

    栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,因此将其单独作为一章,做重点讲解
    2022-02-02
  • Java判断线程池线程是否执行完毕

    Java判断线程池线程是否执行完毕

    这篇文章主要介绍了Java判断线程池线程是否执行完毕,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • JAVA swing布局管理器实例解析

    JAVA swing布局管理器实例解析

    这篇文章主要介绍了JAVA swing布局管理器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Spring整合ehCache全过程

    Spring整合ehCache全过程

    这篇文章主要介绍了Spring整合ehCache全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 解决java.util.zip.ZipException: Not in GZIP format报错问题

    解决java.util.zip.ZipException: Not in GZIP&nbs

    这篇文章主要介绍了解决java.util.zip.ZipException: Not in GZIP format报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 一文详解Spring的Enablexxx注解使用实例

    一文详解Spring的Enablexxx注解使用实例

    这篇文章主要为大家介绍了一文详解Spring的Enablexxx注解使用实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11

最新评论