这篇文章主要介绍了Java中MultipartFile与File互转如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中MultipartFile与File互转如何实现文章都会有所收获,下面我们一起
这篇文章主要介绍了Java中MultipartFile与File互转如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中MultipartFile与File互转如何实现文章都会有所收获,下面我们一起来看看吧。
需求是上传excel文件并读取Excel文件中的内容,根据获取的数据执行完某些业务操作后再将一些数据写回到excel中。前台使用FORMData表单的方式请求后台,后台接收类型是MultipartFile,放置文件过大时会造成内存溢出需要转换为File类型
其实转换的本质都是要创建一个file的临时文件,然后通过各种实现方式将MultipartFile中的内容写入到file中
package com.cxstar.file.util;import org.apache.commons.io.FileUtils;import org.springframework.WEB.multipart.MultipartFile;import java.io.File;import java.io.IOException;public class FileTestUtils { public static File multiPartFileToFile(MultipartFile multipartFile) throws IOException { //获取文件名 String originalFilename = multipartFile.getOriginalFilename(); //获取默认定位到的当前用户目录("user.dir"),也就是当前应用的根路径 String tempDir = System.getProperty("user.dir"); //根目录下生成临时文件 File file = new File(tempDir+File.separator+originalFilename); FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file); return file; }}
此种方式的弊端就是需要在调用此方法后需要再手动删除,也就是要在业务代码中再掺杂删除的逻辑。
public static File multiPartFileToFile2(MultipartFile multipartFile) throws IOException { //获取文件名 String originalFilename = multipartFile.getOriginalFilename(); //获取默认定位到的当前用户目录("user.dir"),也就是当前应用的根路径 String tempDir = System.getProperty("user.dir"); //获取文件名 String filename = StringUtils.substringBeforeLast(originalFilename, "."); //获取文件后缀 String fileExt = StringUtils.substringAfterLast(originalFilename, "."); //在项目根路径生成临时文件 File tempFile = File.createTempFile(filename, "." + fileExt, new File(tempDir)); multipartFile.transferTo(tempFile); //在JVM退出时执行删除此路径下的文件 tempFile.deleteOnExit(); return tempFile; }
注意:
1.防止生成的临时文件,createTempFile()方法会在文件名后添加随机码
2.生成的文件不会立马删除,而是在jvm退出时执行删除此路径下的文件
package com.cxstar.file.util;import org.apache.commons.io.FileUtils;import org.springframework.web.multipart.MultipartFile;import java.io.*;public class FileTestUtils { public static File multiPartFileToFile3(MultipartFile multipartFile) { File file = null; if (multipartFile.isEmpty()) { return null; } try { //本质上还是在项目根路径创建文件 file = new File(multipartFile.getOriginalFilename()); //将MultipartFile的byte[]写入到file中 FileUtils.writeByteArrayToFile(file, multipartFile.getBytes()); } catch (IOException e) { e.printStackTrace(); } return file; }}
此种方式相较于第二种方式,文件名不会发生改变,当然还是要手动删除
MultipartFile文件上传时,其实springMVC已经转为StandardMultipartFile子类型
org.springframework.web.multipart.support.StandardMultiparthttpservletRequest$StandardMultipartFile
MultipartFile是一个接口,因此转成MultipartFile格式需要转成实现MultipartFile接口的实现类即可
package com.cxstar.file.util;import org.springframework.mock.web.MockMultipartFile;import org.springframework.web.multipart.MultipartFile;import java.io.File;import java.io.FileInputStream;public class FileTestUtils { public static MultipartFile getMultipartFile(File file) throws Exception { MultipartFile multipartFile = new MockMultipartFile(file.getName(), new FileInputStream(file)); return multipartFile;}
关于“Java中MultipartFile与File互转如何实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java中MultipartFile与File互转如何实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。
--结束END--
本文标题: Java中MultipartFile与File互转如何实现
本文链接: https://lsjlt.com/news/351602.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0