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.