• 【Java】如何将二进制转换成MultipartFile


            业务场景:前端发送请求到后端进行文件上传,后端接收文件并调用第三方接口进行文件处理,响应格式为二进制,然后我们需要将二进制进行转换为MultipartFile进行文件上传。

            如果你想要将File转换成MultipartFile,可以参考:【Java】如何将File转换成MultipartFile_java file 转multipartfile_MXin5的博客-CSDN博客

     1.传递二进制responseBytes和file的名称即可。

    1. // responseBytes为二进制流,file.getOriginalFilename()为文件的名称。
    2. ByteArrayMultipartFile responseFile = new ByteArrayMultipartFile(responseBytes, "file", file.getOriginalFilename(), "application/octet-stream");

    2. 将二进制流转换成MultipartFile的类:

    1. import org.springframework.web.multipart.MultipartFile;
    2. import java.io.ByteArrayInputStream;
    3. import java.io.File;
    4. import java.io.IOException;
    5. import java.io.InputStream;
    6. import java.nio.file.CopyOption;
    7. import java.nio.file.Files;
    8. import java.nio.file.Path;
    9. import java.nio.file.StandardCopyOption;
    10. /**
    11. * 将二进制流转换成MultipartFile类的对象
    12. */
    13. public class ByteArrayMultipartFile implements MultipartFile {
    14. private final byte[] content;
    15. private final String name;
    16. private final String originalFilename;
    17. private final String contentType;
    18. public ByteArrayMultipartFile(byte[] content, String name, String originalFilename, String contentType) {
    19. this.content = content;
    20. this.name = name;
    21. this.originalFilename = originalFilename;
    22. this.contentType = contentType;
    23. }
    24. @Override
    25. public String getName() {
    26. return name;
    27. }
    28. @Override
    29. public String getOriginalFilename() {
    30. return originalFilename;
    31. }
    32. @Override
    33. public String getContentType() {
    34. return contentType;
    35. }
    36. @Override
    37. public boolean isEmpty() {
    38. return content.length == 0;
    39. }
    40. @Override
    41. public long getSize() {
    42. return content.length;
    43. }
    44. @Override
    45. public byte[] getBytes() {
    46. return content;
    47. }
    48. @Override
    49. public InputStream getInputStream() {
    50. return new ByteArrayInputStream(content);
    51. }
    52. @Override
    53. public void transferTo(File dest) throws IOException, IllegalStateException {
    54. Files.copy(new ByteArrayInputStream(content), dest.toPath(), new CopyOption[]{StandardCopyOption.REPLACE_EXISTING});
    55. }
    56. @Override
    57. public void transferTo(Path dest) throws IOException, IllegalStateException {
    58. Files.copy(new ByteArrayInputStream(content), dest, new CopyOption[]{StandardCopyOption.REPLACE_EXISTING});
    59. }
    60. }

    直接使用

  • 相关阅读:
    第十四届蓝桥杯校模拟赛-编程大题详解+代码(二)
    Mac管理Ruby环境
    缓存失效方案
    Java代码审计前置知识——Spring框架AOP和IoC
    学习笔记(12)js模块、网络基础
    程序员保密协议
    自定义事件
    LoadRunner 使用
    leetcode:滑动窗口----3. 无重复字符的最长子串
    virtio-net 报文组织形式
  • 原文地址:https://blog.csdn.net/m0_64210833/article/details/134371902