MultipartFile 转File的几种方式
前言
一、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的几种方式相关推荐
- MultipartFile 转 File 的两种方式
在spring上传文件中,一般都使用了MultipartFile来接收,但是有需要用到File的地方,这里只介绍两种转为File的方法,当然也有一些其他的方法,我试了有些错误,所以就不提了: tran ...
- Java File.createNewFile 创建文件的四种方式小笔记
本文为joshua317原创文章,转载请注明:转载自joshua317博客 Java File.createNewFile 创建文件的四种方式小笔记 - joshua317的博客 1.File(Str ...
- springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...
- springMVC两种方式实现多文件上传及效率比较
springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实现多文件上传效率上却有着很大的差距 ...
- java木马_Java校验上传图片文件是否含有木马的两种方式
这两天开发一个app遇到了上传文件的安全问题,在这里记录下来,弥补自己只有鱼的记忆的缺陷,也希望有人能够提供更好的思路去解决文件上传的安全问题. 下面这个类是文件上传的公共方法,ToolUtils判断 ...
- 关于mysql存取图片的三种方式(含源码示例)
最近在做小程序的后台,要求将小程序用户以upload方法上传的图片保存到mysql数据库中. 然后机缘巧合三种方式都试了,所以专门整理出来分享给大家.可能有的地方说的不太对,欢迎大家帮纠正. ==== ...
- [Java中实现Excel表导入导出]基于easy-poi和EasyExcel两种方式实现
第一种:基于easy-poi实现Excel导入导出 1.导出Excel表格 第一步:在pom文件中导入依赖 <!--基于easy-poi实现Excel导入导出--><dependen ...
- MultipartFile与File的互转
MultipartFile与File的互转 前言 MultipartFile转File 1.FileUtils.copyInputStreamToFile转换 2.multipartFile.tran ...
- 调用第三方接口的三种方式
调用第三方接口到三种方式 链接 Hutool 依赖 <dependency><groupId>cn.hutool</groupId><artifactId&g ...
最新文章
- cartograhper--X1_lidar
- Java多线程安全问题解决的两种方式代码案例
- 如何做相册_腾讯相册管家再创相册管理软件新纪元
- fusioncharts同一页面显示2个仪表盘,且以java字符串作为xml数据
- [Noip模拟赛] Power
- 特征工程之数据预处理(下)
- QT 格式化字符串功能
- cursor -- 定义鼠标样式
- Excel关于宏的运用
- spring boot 定时间任务
- Linux编译链接环境变量
- 新中大银色快车数据恢复
- 将老电脑从windows xp系统升级到10//将win10 32位系统更为64位
- 宝立食品IPO股价八连涨 是业绩支撑还是资本迷局?
- 小米手机设备锁定怎么强制解除
- Steve Hui:云联云是中国云计算的最好切入点(4月刊推荐)
- google earth的网页版
- 使用mongodump和mongostore对mongodb数据库迁移实践总结
- 优质免费在线学习网站
- 几种Linux版本的使用心得和比较