前言

一、MultipartFile转File

二、代码示例

1.第一种方式

2.第二种方式

3.第三种方式

总结


前言

最近写项目有个需求是上传Excel文件并读取Excel文件中的内容,项目采用的是前后端分离的模式,前端采用FormData形式提交后台,后台接收类型是MultipartFile,但是我读取文件的时候类型是File,因为直接从MultipartFile里面获取流进行处理,文件过大时会造成内存溢出,所以需MultipartFile转File

一、MultipartFile转File

在将 MultipartFile 类型转换为file类型 时,一般都是新建临时文件夹,然后将其转换,可以指定路径新建,也可以建在项目根目录

二、代码示例

1.第一种方式

创建一个临时路径,转换之后得到File,然后再将其删除

File file = new File(path); FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);  

2.第二种方式

此方法我在尝试的过程中一直报错,没成功,百度看到有这种方式,所以记录一下

public File transferToFile(MultipartFile multipartFile) {
//        选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。File file = null;try {String originalFilename = multipartFile.getOriginalFilename();String[] filename = originalFilename.split("\\.");file=File.createTempFile(filename[0], filename[1]);multipartFile.transferTo(file);file.deleteOnExit();} catch (IOException e) {e.printStackTrace();}return file;}

3.第三种方式

这种方式会把上传的文件放到项目的根目录下,也要记得删啊

public File multipartFileToFile(MultipartFile file) throws Exception {File toFile = null;if (file.equals("") || file.getSize() <= 0) {file = null;} else {InputStream ins = null;ins = file.getInputStream();toFile = new File(file.getOriginalFilename());inputStreamToFile(ins, toFile);ins.close();}return toFile;}private static void inputStreamToFile(InputStream ins, File file) {try {OutputStream os = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.close();ins.close();} catch (Exception e) {throw new ToLogException("读取文件错误", e);}}

总结

根据自己项目的需求选择一种方式吧,我是采用的第一种,代码比较简单

后续~

其实本身写这篇文章的时候只是单纯想记录一下,但是没想到被不少人收藏,也有一些童鞋给出了一些完善的观点,那我就再完善一下吧

1.首先第二种方式改为如下:

public File transferToFile(MultipartFile multipartFile) {
//        选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。File file = null;try {String originalFilename = multipartFile.getOriginalFilename();String[] filename = originalFilename.split("\\.");file=File.createTempFile(filename[0], filename[1] + ".");multipartFile.transferTo(file);file.deleteOnExit();} catch (IOException e) {e.printStackTrace();}return file;}

filename[1]后面追加.

2.直接使用transferTo转换

// 先保存到临时文件夹下,操作完成之后进行删除String filePath = Constants.TMP_PATH + DateUtil.getDateDir() + FileUtil.getFileName() + "." + suffix;File targetFile = new File(filePath);if (!targetFile.exists()) {targetFile.mkdirs();}multipartFile.transferTo(targetFile);

其实这个跟第二种方式差不多,如果上传的是临时文件的话,其实还是得删除的

MultipartFile 转File的几种方式相关推荐

  1. MultipartFile 转 File 的两种方式

    在spring上传文件中,一般都使用了MultipartFile来接收,但是有需要用到File的地方,这里只介绍两种转为File的方法,当然也有一些其他的方法,我试了有些错误,所以就不提了: tran ...

  2. Java File.createNewFile 创建文件的四种方式小笔记

    本文为joshua317原创文章,转载请注明:转载自joshua317博客 Java File.createNewFile 创建文件的四种方式小笔记 - joshua317的博客 1.File(Str ...

  3. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

    参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...

  4. springMVC两种方式实现多文件上传及效率比较

    springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实现多文件上传效率上却有着很大的差距 ...

  5. java木马_Java校验上传图片文件是否含有木马的两种方式

    这两天开发一个app遇到了上传文件的安全问题,在这里记录下来,弥补自己只有鱼的记忆的缺陷,也希望有人能够提供更好的思路去解决文件上传的安全问题. 下面这个类是文件上传的公共方法,ToolUtils判断 ...

  6. 关于mysql存取图片的三种方式(含源码示例)

    最近在做小程序的后台,要求将小程序用户以upload方法上传的图片保存到mysql数据库中. 然后机缘巧合三种方式都试了,所以专门整理出来分享给大家.可能有的地方说的不太对,欢迎大家帮纠正. ==== ...

  7. [Java中实现Excel表导入导出]基于easy-poi和EasyExcel两种方式实现

    第一种:基于easy-poi实现Excel导入导出 1.导出Excel表格 第一步:在pom文件中导入依赖 <!--基于easy-poi实现Excel导入导出--><dependen ...

  8. MultipartFile与File的互转

    MultipartFile与File的互转 前言 MultipartFile转File 1.FileUtils.copyInputStreamToFile转换 2.multipartFile.tran ...

  9. 调用第三方接口的三种方式

    调用第三方接口到三种方式 链接 Hutool 依赖 <dependency><groupId>cn.hutool</groupId><artifactId&g ...

最新文章

  1. cartograhper--X1_lidar
  2. Java多线程安全问题解决的两种方式代码案例
  3. 如何做相册_腾讯相册管家再创相册管理软件新纪元
  4. fusioncharts同一页面显示2个仪表盘,且以java字符串作为xml数据
  5. [Noip模拟赛] Power
  6. 特征工程之数据预处理(下)
  7. QT 格式化字符串功能
  8. cursor -- 定义鼠标样式
  9. Excel关于宏的运用
  10. spring boot 定时间任务
  11. Linux编译链接环境变量
  12. 新中大银色快车数据恢复
  13. 将老电脑从windows xp系统升级到10//将win10 32位系统更为64位
  14. 宝立食品IPO股价八连涨 是业绩支撑还是资本迷局?
  15. 小米手机设备锁定怎么强制解除
  16. Steve Hui:云联云是中国云计算的最好切入点(4月刊推荐)
  17. google earth的网页版
  18. 使用mongodump和mongostore对mongodb数据库迁移实践总结
  19. 优质免费在线学习网站
  20. 几种Linux版本的使用心得和比较

热门文章

  1. 无可用下载链接_经典大全合集500个街机游戏大全下载
  2. 成功人士应该具备的十二个条件
  3. 网站优化 SEO教程
  4. 使用questasim 10.7c 对 xilinx 工程 进行仿真
  5. AutoVue现在支持本地2D Creo / ProE图纸
  6. 数据结构---学习前的必知知识
  7. 【可视化大屏】屏幕多分辨率适配方案
  8. 安卓gps北斗搜星源码和导航工具支持安卓12无广告
  9. 5-羧基四甲基罗丹明标记多肽核酸PNA|TMR-Ahx-(TAMRA-Ahx-)-PNA|荧光素标记肽核酸作用机理
  10. 同步传输与异步传输区别