Conversione di un MultipartFile Spring in un file

1. Panoramica

In questo rapido tutorial, tratteremo vari modi per convertire uno Spring MultipartFile in un file .

2. MultipartFile # getBytes

MultipartFile ha un metodo getBytes () che restituisce una matrice di byte del contenuto del file. Possiamo usare questo metodo per scrivere i byte in un file :

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");

Il metodo getBytes () è utile per i casi in cui si desidera eseguire operazioni aggiuntive sul file prima di scrivere su disco , come calcolare un hash di file.

3. MultipartFile # getInputStream

Avanti, Guardiamo MultipartFile s' getInputStream () Metodo :

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");

Qui stiamo usando il metodo getInputStream () per ottenere InputStream , leggere i byte da InputStream e archiviarli nel buffer byte [] . Quindi creiamo un File e OutputStream per scrivere il contenuto del buffer .

L' approccio getInputStream () è utile nei casi in cui è necessario avvolgere InputStream in un altro InputStream , ad esempio un GZipInputStream se il file caricato è stato gzippato.

4. MultipartFile # transferTo

Infine, Guardiamo MultipartFile s' transferTo () Metodo :

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");

Usando il metodo transferTo () , dobbiamo semplicemente creare il file in cui vogliamo scrivere i byte, quindi passare quel file al metodo transferTo () .

Il metodo transferTo () è utile quando MultipartFile deve essere scritto solo su un file .

5. conclusione

In questo tutorial, abbiamo esplorato i modi per convertire uno Spring MultipartFile in un file .

Come al solito, tutti gli esempi di codice possono essere trovati su GitHub.