验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Java中MultipartFile与File互转如何实现

阅读:1163 来源:乙速云 作者:代码code

Java中MultipartFile与File互转如何实现

      前言

      需求是上传Excel文件并读取Excel文件中的内容,根据获取的数据执行完某些业务操作后再将一些数据写回到excel中。前台使用FormData表单的方式请求后台,后台接收类型是MultipartFile,放置文件过大时会造成内存溢出需要转换为File类型

      MultipartFile转File

      其实转换的本质都是要创建一个file的临时文件,然后通过各种实现方式将MultipartFile中的内容写入到file中

      1.FileUtils.copyInputStreamToFile转换

      package com.cxstar.file.util;
      
      import org.apache.commons.io.FileUtils;
      import org.springframework.web.multipart.MultipartFile;
      
      import java.io.File;
      import java.io.IOException;
      
      /**
       * @author zhouquan
       * @description 测试MultipartFile与File互转
       * @date 2023-03-12 17:31
       **/
      public class FileTestUtils {
      
      
          /**
           * MultipartFile转File
           * 

           * 项目根路径创建临时文件,转换得到File,再删除临时文件      *      * @param multipartFile      * @return      */     public static File multiPartFileToFile(MultipartFile multipartFile) throws IOException {         //获取文件名         String originalFilename = multipartFile.getOriginalFilename();         //获取默认定位到的当前用户目录("user.dir"),也就是当前应用的根路径         String tempDir = System.getProperty("user.dir");         //根目录下生成临时文件         File file = new File(tempDir+File.separator+originalFilename);         FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);         return file;     } }

      此种方式的弊端就是需要在调用此方法后需要再手动删除,也就是要在业务代码中再掺杂删除的逻辑。

      2.multipartFile.transferTo(tempFile);

      /**
           * MultipartFile转File
           * 

           * 项目根路径创建缓冲区来实现这个转换      *      * @param multipartFile      * @return      */     public static File multiPartFileToFile2(MultipartFile multipartFile) throws IOException {         //获取文件名         String originalFilename = multipartFile.getOriginalFilename();         //获取默认定位到的当前用户目录("user.dir"),也就是当前应用的根路径         String tempDir = System.getProperty("user.dir");         //获取文件名         String filename = StringUtils.substringBeforeLast(originalFilename, ".");         //获取文件后缀         String fileExt = StringUtils.substringAfterLast(originalFilename, ".");         //在项目根路径生成临时文件         File tempFile = File.createTempFile(filename, "." + fileExt, new File(tempDir));         multipartFile.transferTo(tempFile);         //在jvm退出时执行删除此路径下的文件         tempFile.deleteOnExit();         return tempFile;     }

      注意:
      1.防止生成的临时文件,createTempFile()方法会在文件名后添加随机码
      2.生成的文件不会立马删除,而是在jvm退出时执行删除此路径下的文件

      Java中MultipartFile与File互转如何实现

      3. (推荐)FileUtils.writeByteArrayToFile(file, multipartFile.getBytes());

      package com.cxstar.file.util;
      
      import org.apache.commons.io.FileUtils;
      import org.springframework.web.multipart.MultipartFile;
      
      import java.io.*;
      
      /**
       * @author zhouquan
       * @description 测试MultipartFile与File互转
       * @date 2023-03-12 17:31
       **/
      public class FileTestUtils {
          /**
           * MultipartFile 转 File
           *
           * @param multipartFile
           * @throws Exception
           */
          public static File multiPartFileToFile3(MultipartFile multipartFile) {
              File file = null;
              if (multipartFile.isEmpty()) {
                  return null;
              }
      
              try {
                  //本质上还是在项目根路径创建文件
                  file = new File(multipartFile.getOriginalFilename());
      
                  //将MultipartFile的byte[]写入到file中
                  FileUtils.writeByteArrayToFile(file, multipartFile.getBytes());
      
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return file;
          }
      }

      此种方式相较于第二种方式,文件名不会发生改变,当然还是要手动删除

      Java中MultipartFile与File互转如何实现

      File转MultipartFile

      MultipartFile文件上传时,其实springmvc已经转为StandardMultipartFile子类型

      org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile

      Java中MultipartFile与File互转如何实现

      MultipartFile是一个接口,因此转成MultipartFile格式需要转成实现MultipartFile接口的实现类即可

      Java中MultipartFile与File互转如何实现

      package com.cxstar.file.util;
      
      import org.springframework.mock.web.MockMultipartFile;
      import org.springframework.web.multipart.MultipartFile;
      
      import java.io.File;
      import java.io.FileInputStream;
      
      /**
       * @author zhouquan
       * @description 测试MultipartFile与File互转
       * @date 2023-03-12 17:31
       **/
      public class FileTestUtils {
          public static MultipartFile getMultipartFile(File file) throws Exception {
              MultipartFile multipartFile = new MockMultipartFile(file.getName(), new FileInputStream(file));
              return multipartFile;
      }
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>