知識庫 / Java IO RSS 訂閱

將字節數組轉換為 MultipartFile 在 Java 中

Java IO,Spring
HongKong
4
11:46 AM · Dec 06 ,2025

1. 概述

本教程將介紹如何將 字節數組 轉換為 MultipartFile

MultipartFile 是 Spring 提供的接口,用於接收來自多個請求分塊的文件,因此我們需要一些實現來實例化 MultipartFile 對象。 Spring 沒有提供任何默認的實現(代碼方面),但它提供了用於測試目的的實現。

2. 實現 MultipartFile 接口

讓我們為 MultipartFile 接口創建一個自定義實現,並封裝輸入 字節數組

public class CustomMultipartFile implements MultipartFile {

    private byte[] input;

    @Override
    public String getName() {
        return null;
    }

    @Override
    public String getOriginalFilename() {
        return null;
    }

    @Override
    public String getContentType() {
        return null;
    }
    //We've defined the rest of the interface methods in the next snippet
}

我們已定義一個 字節數組屬性,以便捕獲輸入的值。此外,我們已覆蓋了接口中依賴於實現細節的方法。因此,文件名或內容類型可以作為自定義邏輯提供。結果,這裏返回了 null

我們還提供了接口中其他所需方法的自定義實現:

public class CustomMultipartFile implements MultipartFile {

    //previous methods
    @Override
    public boolean isEmpty() {
        return input == null || input.length == 0;
    }

    @Override
    public long getSize() {
        return input.length;
    }

    @Override
    public byte[] getBytes() throws IOException {
        return input;
    }

    @Override
    public InputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(input);
    }

    @Override
    public void transferTo(File destination) throws IOException, IllegalStateException {
        try(FileOutputStream fos = new FileOutputStream(destination)) {
            fos.write(input);
        }
    }
}

這些方法可能不需要任何自定義邏輯,因此我們已在我們的類中定義了它們。 實現 transferTo(File destination) 方法有多種不同的方式。 以下是一些示例:

我們可以使用 Java NIO:

@Override
public void transferTo(File destination) throws IOException, IllegalStateException {
    Path path = Paths.get(destination.getPath());
    Files.write(path, input);
}

另一個選項是在我們的 POM 中添加 Apache commons IO 依賴項,並使用 <em >FileUtils</em> 類:

@Override
public void transferTo(File destination) throws IOException, IllegalStateException {
    FileUtils.writeByteArrayToFile(destination, input);
}

transferTo(File destination) 方法在 MultipartFile 只需寫入到 File 時非常有用,並且有多種將 MultipartFile 寫入 File 的方法。

現在我們已經定義了我們的類,讓我們用一個簡單的測試用例來測試這個實現:

@Test
void whenProvidingByteArray_thenMultipartFileCreated() throws IOException {
    byte[] inputArray = "Test String".getBytes();
    CustomMultipartFile customMultipartFile = new CustomMultipartFile(inputArray);
    Assertions.assertFalse(customMultipartFile.isEmpty());
    Assertions.assertArrayEquals(inputArray, customMultipartFile.getBytes());
    Assertions.assertEquals(inputArray.length,customMultipartFile.getSize());
}

我們已成功將字節數組轉換為 MultipartFile 實例,在上述測試用例中。

3. MockMultipartFile

Spring 提供 MockMultipartFile 用於測試目的,以便訪問 Multipart 請求。

讓我們創建一個測試用例來查看其工作原理:

@Test
void whenProvidingByteArray_thenMockMultipartFileCreated() throws IOException {
    byte[] inputArray = "Test String".getBytes();
    MockMultipartFile mockMultipartFile = new MockMultipartFile("tempFileName",inputArray);
    Assertions.assertFalse(mockMultipartFile.isEmpty());
    Assertions.assertArrayEquals(inputArray, mockMultipartFile.getBytes());
    Assertions.assertEquals(inputArray.length,mockMultipartFile.getSize());
}

我們已成功使用 Spring 提供的 MockMultipartFile 對象將 字節數組 轉換為 MultipartFile 對象。

4. 結論

在本教程中,我們介紹瞭如何將 字節數組 轉換為 MultipartFile 對象。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.