(一)
从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
- public String infornationshow(@RequestParam(value = "file", required = false) MultipartFile file,HttpServletRequest request,HttpServletResponse response) throws IOException{
如上面代码所示,后台获取到的是MultipartFile类型,那么如何进行转换变成file传到接口中呢?
可以使用如下方法
[java] view plain copy
- File f = null;
- if(file.equals("")||file.getSize()<=0){
- file = null;
- }else{
- InputStream ins = file.getInputStream();
- f=new File(file.getOriginalFilename());
- inputStreamToFile(ins, f);
- }
[java] view plain copy
- public 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) {
- e.printStackTrace();
- }
- }
但这种办法会出现一个问题,会在项目目录下自动生成一个临时的file文件,如何将这个文件删除呢?
[java] view plain copy
- File del = new File(f.toURI());
- del.delete();
新建一个file,然后获取之前的地址使用file自带的delete方法就可以了
(三)Spring MultipartFile 上传文件文件getInputStream无法获取输入流
MultipartFile file;
file能获取表单上传文件基本信息(文件名和后缀名)
InputStream input = file.getInputStream();
但无法获取Stream,原因为Spring配置问题
[html] view plain copy
- <bean id="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <property name="defaultEncoding">
- <value>UTF-8</value>
- </property>
- <property name="maxUploadSize">
- <value>32505856</value>
- </property>
- <property name="maxInMemorySize"><!--设置了输入最大内存,所以文件太大上传时无法读入内存,只能在服务器中生成一个临时文件-->
- <!-- <value>4096</value> -->
- <value>32505856</value>
- </property>
- </bean>
[html] view plain copy
- 原因为我配置了输入文件最大内存,所以文件太大上传时无法读入内存,只能在服务器中生成一个临时文件