Aprende cómo implementar una funcionalidad para subir archivos en una aplicación Spring Boot. Este proceso incluye la configuración de endpoints, el manejo de archivos en el servidor y las mejores prácticas para garantizar la seguridad y eficiencia.
Spring Boot facilita la gestión de archivos gracias a su integración con Spring MVC. Para habilitar esta funcionalidad, es necesario configurar un controlador que maneje las peticiones POST con contenido de archivo.
1. Dependencias del proyecto:
Asegúrate de incluir las dependencias necesarias en tu archivo pom.xml
o build.gradle
. Spring Web es imprescindible.
<!-- Ejemplo para Maven -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. Configuración en el archivo application.properties:
Define los límites de tamaño para los archivos que pueden ser subidos al servidor.
spring.servlet.multipart.max-file-size=2MB
spring.servlet.multipart.max-request-size=2MB
3. Controlador para manejar la subida:
Crea un endpoint que reciba los archivos. Usa la anotación @RequestParam
para procesarlos.
@RestController
@RequestMapping("/api/files")
public class FileController {
@PostMapping("/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Archivo vacío");
}
try {
// Guardar el archivo en el servidor
Path path = Paths.get("uploads/" + file.getOriginalFilename());
Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
return ResponseEntity.ok("Archivo subido exitosamente");
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error al subir el archivo");
}
}
}
4. Crear directorios si es necesario:
Asegúrate de que el directorio donde se guardan los archivos exista. Puedes crear este directorio durante la inicialización de la aplicación.
@PostConstruct
public void init() {
Path uploadDir = Paths.get("uploads");
try {
Files.createDirectories(uploadDir);
} catch (IOException e) {
throw new RuntimeException("Error al crear directorio de uploads", e);
}
}
curl -F "file=@ruta_del_archivo.txt" http://localhost:8080/api/files/upload
<form action="/api/files/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">Subir archivo</button>
</form>
Consulta la documentación oficial de Spring Boot para más detalles sobre la gestión de archivos y buenas prácticas.
Jorge García
Fullstack developer