java后台本地文件转为MultipartFile类型的实现方式
作者:探索途中的码农
在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; } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。