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

相关文章

  • JPA Specification常用查询+排序实例

    JPA Specification常用查询+排序实例

    这篇文章主要介绍了JPA Specification常用查询+排序实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java将数组转换成字符串的四种方法总结

    Java将数组转换成字符串的四种方法总结

    这篇文章主要给大家介绍了关于Java将数组转换成字符串的四种方法,每种方法都有其适用的场景和优缺点,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • springboot整合spring-retry的实现示例

    springboot整合spring-retry的实现示例

    本文将结合实例代码,介绍springboot整合spring-retry的实现示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • idea2023创建JavaWeb教程之右键没有Servlet的问题解决

    idea2023创建JavaWeb教程之右键没有Servlet的问题解决

    最近在写一个javaweb项目,但是在IDEA中创建好项目后,在搭建结构的时候创建servlet文件去没有选项,所以这里给大家总结下,这篇文章主要给大家介绍了关于idea2023创建JavaWeb教程之右键没有Servlet问题的解决方法,需要的朋友可以参考下
    2023-10-10
  • 全面解析SpringBoot自动配置的实现原理

    全面解析SpringBoot自动配置的实现原理

    这篇文章主要介绍了全面解析SpringBoot自动配置的实现原理的相关资料,需要的朋友可以参考下
    2017-05-05
  • Java中枚举类enum的values()方法举例详解

    Java中枚举类enum的values()方法举例详解

    这篇文章主要给大家介绍了关于Java中枚举类enum的values()方法举例详解,作为一种常用方法,可以在枚举中对数组里的枚举值进行遍历,这就是values()方法的使用,需要的朋友可以参考下
    2023-11-11
  • SpringBoot 2.x整合Log4j2日志的详细步骤

    SpringBoot 2.x整合Log4j2日志的详细步骤

    log4j2优越的性能其原因在于log4j2使用了LMAX,一个无锁的线程间通信库代替了,logback和log4j之前的队列,并发性能大大提升,下面这篇文章主要给大家介绍了关于SpringBoot 2.x整合Log4j2日志的相关资料,需要的朋友可以参考下
    2022-10-10
  • Spring配置多数据源导致事物无法回滚问题

    Spring配置多数据源导致事物无法回滚问题

    这篇文章主要介绍了Spring配置多数据源导致事物无法回滚问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 详解如何将已有项目改造为Spring Boot项目

    详解如何将已有项目改造为Spring Boot项目

    本篇文章主要介绍了如何将已有项目改造为Spring Boot项目,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • SpringMVC 重定向参数RedirectAttributes实例

    SpringMVC 重定向参数RedirectAttributes实例

    这篇文章主要介绍了SpringMVC 重定向参数RedirectAttributes实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论