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 .