• 【Java】如何将File转换成MultipartFile


            假如你把你的后端项目部署在服务器上的时候,然后你要去读取某个路径下的文件,然后你就要提供文件的路径,然后获取到该文件对象,但是你需要将当前文件对象File转换成MultipartFile再发送http请求传递到其他服务器上,这样如何实现呢?

            后端如何发送http请求请参考:【Java】Java发送httpPost,httpGet,httpDelete请求-CSDN博客

    代码实现:

    1. import org.springframework.web.multipart.MultipartFile;
    2. import java.io.*;
    3. public class FileToMultipartFile implements MultipartFile {
    4. private final File file;
    5. public FileToMultipartFile(File file) {
    6. this.file = file;
    7. }
    8. @Override
    9. public String getName() {
    10. return file.getName();
    11. }
    12. @Override
    13. public String getOriginalFilename() {
    14. return file.getName();
    15. }
    16. @Override
    17. public String getContentType() {
    18. return "application/octet-stream";
    19. }
    20. @Override
    21. public boolean isEmpty() {
    22. return file.length() == 0;
    23. }
    24. @Override
    25. public long getSize() {
    26. return file.length();
    27. }
    28. @Override
    29. public byte[] getBytes() throws IOException {
    30. InputStream is = new FileInputStream(file);
    31. ByteArrayOutputStream baos = new ByteArrayOutputStream();
    32. byte[] buffer = new byte[1024];
    33. int len;
    34. while ((len = is.read(buffer)) != -1) {
    35. baos.write(buffer, 0, len);
    36. }
    37. return baos.toByteArray();
    38. }
    39. @Override
    40. public InputStream getInputStream() throws IOException {
    41. return new FileInputStream(file);
    42. }
    43. @Override
    44. public void transferTo(File dest) throws IOException, IllegalStateException {
    45. try (InputStream is = new FileInputStream(file);
    46. OutputStream os = new FileOutputStream(dest)) {
    47. byte[] buffer = new byte[1024];
    48. int len;
    49. while ((len = is.read(buffer)) != -1) {
    50. os.write(buffer, 0, len);
    51. }
    52. }
    53. }
    54. }

    单元测试:

    1. import static org.junit.jupiter.api.Assertions.assertEquals;
    2. import static org.junit.jupiter.api.Assertions.assertTrue;
    3. import org.junit.jupiter.api.BeforeEach;
    4. import org.junit.jupiter.api.Test;
    5. import org.springframework.mock.web.MockMultipartFile;
    6. public class FileToMultipartFileTest {
    7. private FileToMultipartFile fileToMultipartFile;
    8. @BeforeEach
    9. public void setUp() {
    10. // 在测试之前设置 FileToMultipartFile 实例
    11. // 假设存在一个名为 "xxx.png" 的文件
    12. // 构建文件路径
    13. String localImagePath = "static/images/xxx.png"; // 修改为实际的文件路径(相对路径)
    14. File file = new File(localImagePath);
    15. MultipartFile file = new FileToMultipartFile(file);
    16. //...然后对file 文件进行后续的处理
    17. }
    18. @Test
    19. public void testGetName() {
    20. // 测试 getName 方法
    21. String name = fileToMultipartFile.getName();
    22. assertEquals("default_avatar.png", name);
    23. }
    24. @Test
    25. public void testGetOriginalFilename() {
    26. // 测试 getOriginalFilename 方法
    27. String originalFilename = fileToMultipartFile.getOriginalFilename();
    28. assertEquals("default_avatar.png", originalFilename);
    29. }
    30. @Test
    31. public void testGetContentType() {
    32. // 测试 getContentType 方法
    33. String contentType = fileToMultipartFile.getContentType();
    34. assertEquals("application/octet-stream", contentType);
    35. }
    36. @Test
    37. public void testIsEmpty() {
    38. // 测试 isEmpty 方法
    39. boolean isEmpty = fileToMultipartFile.isEmpty();
    40. assertTrue(!isEmpty); // 这里应该为 false
    41. }
    42. @Test
    43. public void testGetSize() {
    44. // 测试 getSize 方法
    45. long size = fileToMultipartFile.getSize();
    46. assertTrue(size > 0); // 文件大小应该大于 0
    47. }
    48. // 其它方法的测试可以类似地进行
    49. }

    如何你需要转换直接引入上面的FileToMultipartFile即可。

  • 相关阅读:
    Android APP开机启动,安卓APP开发自启动,安卓启动后APP自动启动
    SD卡格式化如何恢复数据?
    JavaScript系列之if语句
    【七大排序算法】插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序
    go语言实现简单认证样例
    Monocle 3 | 太牛了!单细胞必学R包!~(一)(预处理与降维聚类)
    【计算机网络】UDP协议
    自动化测试报告
    八股文系列:程序开发中的集合容器,你了解多少?
    pytorch加载darknet权重文件
  • 原文地址:https://blog.csdn.net/m0_64210833/article/details/133772231