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 .