Conversión de un archivo Spring MultipartFile en un archivo

1. Información general

En este tutorial rápido, cubriremos varias formas de convertir un Spring MultipartFile en un archivo .

2. MultipartFile # getBytes

MultipartFile tiene un método getBytes () que devuelve una matriz de bytes del contenido del archivo. Podemos usar este método para escribir los bytes en un archivo :

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

El método getBytes () es útil para los casos en los que queremos realizar operaciones adicionales en el archivo antes de escribir en el disco , como calcular un hash de archivo.

3. MultipartFile # getInputStream

A continuación, Echemos un vistazo a MultipartFile 's getInputStream () método :

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

Aquí estamos usando el método getInputStream () para obtener InputStream , leer los bytes de InputStream y almacenarlos en el búfer de bytes [] . Luego creamos un File y OutputStream para escribir el contenido del búfer .

El enfoque getInputStream () es útil en los casos en los que necesitamos envolver el InputStream en otro InputStream , digamos , por ejemplo, un GZipInputStream si el archivo cargado fue comprimido con gzip.

4. MultipartFile # transferTo

Por último, Echemos un vistazo a MultipartFile 's TransferTo () método :

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 el método transferTo () , simplemente tenemos que crear el archivo en el que queremos escribir los bytes, luego pasar ese archivo al método transferTo () .

El método transferTo () es útil cuando el MultipartFile solo necesita escribirse en un archivo .

5. Conclusión

En este tutorial, exploramos formas de convertir un Spring MultipartFile en un archivo .

Como de costumbre, todos los ejemplos de código se pueden encontrar en GitHub.