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-8value>  
  5.         property>  
  6.         <property name="maxUploadSize">  
  7.             <value>32505856value>  
  8.         property>  
  9.         <property name="maxInMemorySize">  
  10.               
  11.             <value>32505856value>  
  12.         property>  
  13.     bean>  

 

[html] view plain copy

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

 

你可能感兴趣的:(JAVA基础知识)