java后台本地文件转为MultipartFile类型的实现方式
更新时间:2025年02月13日 09:35:20 作者:探索途中的码农
在Java后台将本地文件转换为MultipartFile类型,可以通过使用FileItemFactory创建FileItem,然后使用CommonsMultipartFile类构造一个MultipartFile对象,将本地文件流转换为MultipartFile,getMultipartFiles()和getMultipartFiles()方法
java后台本地文件转为MultipartFile类型
前端上传文件转为MultipartFile类型,java后台通过springmvc接收自动转换处理就不用多说了。
现在需要在后台java代码里将本地文件转换为MultipartFile类型如何处理呢?
如下代码
主要利用FileItemFactory创建FileItem,MultipartFile的实现类CommonsMultipartFile构造一个对象,将本地读取的文件流转换为MultipartFile。
getMultipartFiles()和getMultipartFiles()支持一个文件的转换和多个文件的转换。
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.*;
public class MultipartFileTest {
private static final Logger log = LoggerFactory.getLogger(MultipartFileTest.class);
private MultipartFileTest() { }
public static void main(String[] args) {
// 本地文件转为MultipartFile类型
try{
InputStream fis = new FileInputStream("E:\\tool\\20230102word.doc");
MultipartFileTest.getMultipartFile(fis, "20230102word.doc");
}catch (FileNotFoundException e){
log.error("FileNotFoundException exception", e);
throw new RuntimeException("文件不存在");
}
}
public static MultipartFile getMultipartFile(InputStream inputStream, String fileName) {
FileItem fileItem = createFileItem(inputStream, fileName);
return new CommonsMultipartFile(fileItem);
}
public static MultipartFile[] getMultipartFiles(InputStream[] inputStream, String fileName) {
// 多文件转换
int length = inputStream.length;
MultipartFile[] multipartFiles = new MultipartFile[length];
for (int i = 0; i < length; i++) {
FileItem fileItem = createFileItem(inputStream[i], fileName);
multipartFiles[i] = new CommonsMultipartFile(fileItem);
}
return multipartFiles;
}
public static FileItem createFileItem(InputStream inputStream, String fileName) {
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem fileItem = factory.createItem("file", MediaType.MULTIPART_FORM_DATA_VALUE, true, fileName);
int read = 0;
OutputStream os = null;
byte[] buffer = new byte[10 * 1024 * 1024];
try {
os = fileItem.getOutputStream();
while ((read = inputStream.read(buffer, 0, 4096)) != -1) {
os.write(buffer, 0, read);
}
inputStream.close();
} catch (IOException e) {
log.error("os write exception", e);
throw new IllegalArgumentException("文件流输出失败");
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
log.error("stream os close exception", e);
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.error("stream inputStream close exception", e);
}
}
}
return fileItem;
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Mybatis一级缓存和结合Spring Framework后失效的源码探究
这篇文章主要介绍了Mybatis一级缓存和结合Spring Framework后失效的源码探究,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-04-04
tio-boot整合hotswap-classloader实现热加载方法实例
这篇文章主要为大家介绍了tio-boot整合hotswap-classloader实现热加载方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-12-12
Java获取resources下文件路径的几种方法及遇到的问题
这篇文章主要给大家介绍了关于Java获取resources下文件路径的几种方法及遇到的问题,在Java开发中经常需要读取项目中resources目录下的文件或获取资源路径,需要的朋友可以参考下2023-12-12


最新评论