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

相关文章

  • Spring获取管理对象常用方法详解

    Spring获取管理对象常用方法详解

    这篇文章主要介绍了Spring获取管理对象常用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 利用JAVA反射,读取数据库表名,自动生成对应实体类的操作

    利用JAVA反射,读取数据库表名,自动生成对应实体类的操作

    这篇文章主要介绍了利用JAVA反射,读取数据库表名,自动生成对应实体类的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 浅谈JSP是如何编译成servlet并提供服务的

    浅谈JSP是如何编译成servlet并提供服务的

    JSP是Servlet的一种特殊形式,JSP页面最终是编译为Servlet执行的,那么本文主要介绍了JSP是如何编译成servlet并提供服务的,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 解决javac不是内部或外部命令,也不是可运行程序的报错问题

    解决javac不是内部或外部命令,也不是可运行程序的报错问题

    在学着使用Java的命令行来编译java文件的时候,遇到了这个问题,本文主要介绍了解决javac不是内部或外部命令,也不是可运行程序的报错问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 基于spring DI的三种注入方式分析

    基于spring DI的三种注入方式分析

    这篇文章主要介绍了基于spring DI的三种注入方式分析,具有很好的参考价值,希望对大家有所帮助。
    2021-07-07
  • Java实现验证码的产生和验证

    Java实现验证码的产生和验证

    这篇文章主要为大家详细介绍了Java实现验证码的产生和验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2012-01-01
  • 一文搞懂Spring中@Autowired和@Resource的区别

    一文搞懂Spring中@Autowired和@Resource的区别

    @Autowired 和 @Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见的面试题之一,所以我们今天就来盘它
    2022-08-08
  • SpringCloud使用集中配置组件Config规避信息泄露

    SpringCloud使用集中配置组件Config规避信息泄露

    项目应用中,数据库连接信息、Access-key、Secret-key等由于其及其敏感和特殊性,一旦泄露出去就很可能会使得应用遭到黑客攻击,例如数据库账号密码泄露可能导致“拖库”,甚至数据丢失。此等事件偶有发生,那么,在分布式微服务项目中,怎么避免这种情况呢
    2022-07-07
  • Java vector的详解及实例

    Java vector的详解及实例

    这篇文章主要介绍了Java vector的详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java读写pdf文件的详细实现方法

    Java读写pdf文件的详细实现方法

    最近公司的项目中需要操作pdf文件,所以这里给大家总结下方法,这篇文章主要给大家介绍了关于Java读写pdf文件的详细实现方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09

最新评论