Перейти к основному содержимому

Преобразование Spring MultipartFile в файл

· 2 мин. чтения

1. Обзор

В этом кратком руководстве мы рассмотрим различные способы преобразования Spring MultipartFile в File .

2. MultipartFile#getBytes

MultipartFile имеет метод getBytes() , который возвращает массив байтов содержимого файла. Мы можем использовать этот метод для записи байтов в файл :

MultipartFile multipartFile = new MockMultipartFile("sourceFile.tmp", "Hello World".getBytes());

File file = new File("src/main/resources/targetFile.tmp");

try (OutputStream os = new FileOutputStream(file)) {
os.write(multipartFile.getBytes());
}

assertThat(FileUtils.readFileToString(new File("src/main/resources/targetFile.tmp"), "UTF-8"))
.isEqualTo("Hello World");

Метод getBytes() полезен в тех случаях, когда мы хотим выполнить дополнительные операции с файлом перед записью на диск , например, вычислить хэш файла.

3. MultipartFile#getInputStream

Далее, давайте посмотрим на метод getInputStream () MultipartFile `` :

MultipartFile multipartFile = new MockMultipartFile("sourceFile.tmp", "Hello World".getBytes());

InputStream initialStream = multipartFile.getInputStream();
byte[] buffer = new byte[initialStream.available()];
initialStream.read(buffer);

File targetFile = new File("src/main/resources/targetFile.tmp");

try (OutputStream outStream = new FileOutputStream(targetFile)) {
outStream.write(buffer);
}

assertThat(FileUtils.readFileToString(new File("src/main/resources/targetFile.tmp"), "UTF-8"))
.isEqualTo("Hello World");

Здесь мы используем метод getInputStream() для получения InputStream , чтения байтов из InputStream и сохранения их в буфере byte[] . Затем мы создаем File и OutputStream для записи содержимого буфера .

Подход getInputStream() полезен в тех случаях, когда нам нужно обернуть InputStream в другой InputStream , скажем, например, в GZipInputStream , если загруженный файл был заархивирован.

4. MultipartFile#transferTo

Наконец, давайте посмотрим на метод TransferTo () MultipartFile `` :

MultipartFile multipartFile = new MockMultipartFile("sourceFile.tmp", "Hello World".getBytes());

File file = new File("src/main/resources/targetFile.tmp");

multipartFile.transferTo(file);

assertThat(FileUtils.readFileToString(new File("src/main/resources/targetFile.tmp"), "UTF-8"))
.isEqualTo("Hello World");

Используя метод transferTo() , нам просто нужно создать файл , в который мы хотим записать байты, а затем передать этот файл методу transferTo() .

Метод transferTo() полезен, когда MultipartFile нужно записать только в файл .

5. Вывод

В этом руководстве мы рассмотрели способы преобразования Spring MultipartFile в файл .

Как обычно, все примеры кода можно найти на GitHub .