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 對象。