【Java】如何将二进制转换成MultipartFile
业务场景:前端发送请求到后端进行文件上传,后端接收文件并调用第三方接口进行文件处理,响应格式为二进制,然后我们需要将二进制进行转换为MultipartFile进行文件上传。
如果你想要将File转换成MultipartFile,可以参考:【Java】如何将File转换成MultipartFile_java file 转multipartfile_MXin5的博客-CSDN博客
1.传递二进制responseBytes和file的名称即可。
// responseBytes为二进制流,file.getOriginalFilename()为文件的名称。
ByteArrayMultipartFile responseFile = new ByteArrayMultipartFile(responseBytes, "file", file.getOriginalFilename(), "application/octet-stream");
2. 将二进制流转换成MultipartFile的类:
import org.springframework.web.multipart.MultipartFile;import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;import java.nio.file.CopyOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;/*** 将二进制流转换成MultipartFile类的对象*/
public class ByteArrayMultipartFile implements MultipartFile {private final byte[] content;private final String name;private final String originalFilename;private final String contentType;public ByteArrayMultipartFile(byte[] content, String name, String originalFilename, String contentType) {this.content = content;this.name = name;this.originalFilename = originalFilename;this.contentType = contentType;}@Overridepublic String getName() {return name;}@Overridepublic String getOriginalFilename() {return originalFilename;}@Overridepublic String getContentType() {return contentType;}@Overridepublic boolean isEmpty() {return content.length == 0;}@Overridepublic long getSize() {return content.length;}@Overridepublic byte[] getBytes() {return content;}@Overridepublic InputStream getInputStream() {return new ByteArrayInputStream(content);}@Overridepublic void transferTo(File dest) throws IOException, IllegalStateException {Files.copy(new ByteArrayInputStream(content), dest.toPath(), new CopyOption[]{StandardCopyOption.REPLACE_EXISTING});}@Overridepublic void transferTo(Path dest) throws IOException, IllegalStateException {Files.copy(new ByteArrayInputStream(content), dest, new CopyOption[]{StandardCopyOption.REPLACE_EXISTING});}
}
直接使用