项目中有时候会需要调用别人的接口上传一个文件,别人的接口参数为 MultipartFile 类型,需要对 File 文件进行一个转换再进行上传。
这里整理了一个较为实用的方法:
public static MultipartFile ofMultipartFile(File file) {FileItem fileItem = new DiskFileItemFactory().createItem("file", MediaType.MULTIPART_FORM_DATA_VALUE, true, file.getName());try (InputStream inputStream = Files.newInputStream(file.toPath());OutputStream outputStream = fileItem.getOutputStream()) {IOUtils.copy(inputStream, outputStream);} catch (Exception e) {throw new IllegalArgumentException(e.getMessage(), e);}return new CommonsMultipartFile(fileItem);
}
虽然用 MockMultipartFile 实现更简单,只需要:
public static MultipartFile ofMultipartFile(File file) throws Exception {return new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, Files.newInputStream(file.toPath()));
}
但一方面需要引入测试依赖,另一方面将测试类用于实际开发场景总觉得怪怪的。