MultipartFile转换File完整版

(一)

 

从springmvc获取到的文件是MultipartFile类型的,有的时候不能直接用从这种类型获取到的inputstream操作一些事情,比如从中初始化poi的Workbook,这时候要怎么获取到File式的流呢? 
有一个方法就是把读到的MultipartFile转存到本地,然后再从本地读取这个转存的这个临时文件,从中获取文件流。这么写的话可以达到目的但是听起来就很繁琐对不对。还有一个方法,是从csdn论坛上看到的一部分获取的灵感,在这里分享给大家: 
其中mFile就是MultipartFile类型的。

import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.apache.commons.fileupload.disk.DiskFileItem;

CommonsMultipartFile cFile = (CommonsMultipartFile) mFile;
        DiskFileItem fileItem = (DiskFileItem) cFile.getFileItem();
        InputStream inputStream = fileItem.getInputStream();

(二)

 

[java] view plain copy

  1. public String infornationshow(@RequestParam(value = "file", required = false) MultipartFile file,HttpServletRequest request,HttpServletResponse response) throws IOException{  

如上面代码所示,后台获取到的是MultipartFile类型,那么如何进行转换变成file传到接口中呢?

可以使用如下方法

 

[java] view plain copy

  1. File f = null;  
  2.             if(file.equals("")||file.getSize()<=0){  
  3.                 file = null;  
  4.             }else{  
  5.                 InputStream ins = file.getInputStream();  
  6.                 f=new File(file.getOriginalFilename());  
  7.                 inputStreamToFile(ins, f);  
  8.             }  

 

[java] view plain copy

  1. public static void inputStreamToFile(InputStream ins,File file) {  
  2.       try {  
  3.        OutputStream os = new FileOutputStream(file);  
  4.        int bytesRead = 0;  
  5.        byte[] buffer = new byte[8192];  
  6.        while ((bytesRead = ins.read(buffer, 08192)) != -1) {  
  7.         os.write(buffer, 0, bytesRead);  
  8.        }  
  9.        os.close();  
  10.        ins.close();  
  11.       } catch (Exception e) {  
  12.        e.printStackTrace();  
  13.       }  
  14.      }  


但这种办法会出现一个问题,会在项目目录下自动生成一个临时的file文件,如何将这个文件删除呢?

 

[java] view plain copy

  1. File del = new File(f.toURI());  
  2. del.delete();  

新建一个file,然后获取之前的地址使用file自带的delete方法就可以了

(三)Spring MultipartFile 上传文件文件getInputStream无法获取输入流

 

MultipartFile file;

file能获取表单上传文件基本信息(文件名和后缀名)

InputStream input = file.getInputStream();

但无法获取Stream,原因为Spring配置问题

 

 

[html] view plain copy

  1. <bean id="multipartResolver"  
  2.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  3.         <property name="defaultEncoding">  
  4.             <value>UTF-8</value>  
  5.         </property>  
  6.         <property name="maxUploadSize">  
  7.             <value>32505856</value>  
  8.         </property>  
  9.         <property name="maxInMemorySize"><!--设置了输入最大内存,所以文件太大上传时无法读入内存,只能在服务器中生成一个临时文件-->  
  10.             <!-- <value>4096</value> -->  
  11.             <value>32505856</value>  
  12.         </property>  
  13.     </bean>  

 

[html] view plain copy

  1. 原因为我配置了输入文件最大内存,所以文件太大上传时无法读入内存,只能在服务器中生成一个临时文件  

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值