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 .