package com.casic.missiles.utils; 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.*; /** * @Description: * @Author: wangpeng * @Date: 2023/4/7 15:37 */ public class FileUtil { private static Logger log = LoggerFactory.getLogger(FileUtil.class); /** * MultipartFile转File */ public static File multipartFileToFile(MultipartFile multipartFile) { File file = null; InputStream inputStream = null; OutputStream outputStream = null; try { inputStream = multipartFile.getInputStream(); file = new File(multipartFile.getOriginalFilename()); outputStream = new FileOutputStream(file); //项目根目录下放置文件 write(inputStream, outputStream); } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return file; } public static void write(InputStream inputStream, OutputStream outputStream) { byte[] buffer = new byte[4096]; try { int count = inputStream.read(buffer, 0, buffer.length); while (count != -1) { outputStream.write(buffer, 0, count); count = inputStream.read(buffer, 0, buffer.length); } } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } public static MultipartFile getMultipartFile(InputStream inputStream, String fileName) { FileItem fileItem = createFileItem(inputStream, fileName); //CommonsMultipartFile是feign对multipartFile的封装,但是要FileItem类对象 return new CommonsMultipartFile(fileItem); } /** * FileItem类对象创建 */ public static FileItem createFileItem(InputStream inputStream, String fileName) { FileItemFactory factory = new DiskFileItemFactory(16, null); String textFieldName = "file"; FileItem item = factory.createItem(textFieldName, MediaType.APPLICATION_OCTET_STREAM_VALUE, true, fileName); int bytesRead = 0; byte[] buffer = new byte[8192]; OutputStream os = null; //使用输出流输出输入流的字节 try { os = item.getOutputStream(); while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } inputStream.close(); } catch (IOException e) { log.error("Stream copy exception", e); throw new IllegalArgumentException("文件上传失败"); } finally { if (os != null) { try { os.close(); } catch (IOException e) { log.error("Stream close exception", e); } } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { log.error("Stream close exception", e); } } } return item; } }