Рубрики
Без рубрики

Преобразование составного файла Spring в файл

Научитесь конвертировать Spring MultipartFile в файл.

Автор оригинала: baeldung.

1. Обзор

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

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

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

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 [] . Затем мы создаем Файл и OutputStream для записи содержимого буфера .

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

4. MultipartFile#transferTo

Наконец, давайте посмотрим на MultipartFile ‘s transferTo() method :

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 .