Subir Imágenes a FiberStorage con Angular y HTML
Curso de Angular Forms: Creación y Optimización de Formularios Web
Contenido del curso
Primeros pasos con Angular Forms
- 5

Ventajas de los Formularios Reactivos en Angular
01:32 min - 6

For Control en Formularios Reactivos: Creación y Uso Básico
17:16 min - 7

Tipos de Input en HTML y su Impacto en la Experiencia de Usuario
08:12 min - 8

Uso de Selects y Selectores Múltiples en Formularios HTML
06:59 min - 9

Implementación de Inputs Radio y Checkbox en Formularios HTML
09:20 min - 10

Validaciones en Formularios con Angular: Sincronización y Estados
12:15 min - 11

Integración de CSS Dinámico en Formularios Reactivos con Angular
12:42 min
Descubre todas las validaciones de Angular Forms
- 12

Manejo de formularios reactivos con FormGroup en Angular
10:00 min - 13

Creación de Formularios Reactivos con FormBuilder en Angular
12:25 min - 14

Validaciones en Angular: 11 Métodos y Expresiones Regulares
13:40 min - 15

Manejo de FormGroups Anidados en Formularios Angular
09:23 min - 16

Implementación de Formularios con Angular Material
14:31 min - 17

Errores Comunes en Formularios Angular Material
05:26 min - 18

Validaciones Personalizadas de Contraseñas en Angular
15:22 min
Implemeta validaciones avanzadas en PlatziStore
- 19

Validaciones Grupales en Formularios Reactivos de Angular
10:11 min - 20

Validaciones Condicionadas en Formularios Reactivos
09:09 min - 21

Gestión de Categorías en Angular: Creación y Edición de Formularios
06:32 min - 22

Conexión de una API REST con Angular y Postman
15:47 min - 23

Subir Imágenes a FiberStorage con Angular y HTML
Viendo ahora - 24

Validaciones Asíncronas con API para Formularios de Categorías
17:55 min - 25

Edición de Categorías con Patch Value en Angular
11:16 min - 26

Editar y Crear Categorías con un Solo Formulario
06:01 min
Construye formularios dinámicos conectando una API
- 27

Patrón Smart y DOM Components en Formularios Angular
17:01 min - 28

Modificación de Inputs en Angular con Setters y Ciclo de Vida
09:48 min - 29

"Mejoras en Formularios y Validaciones de Productos"
10:13 min - 30

Select dinámico con Angular y API de categorías
12:17 min - 31

Select dinámico con objetos en Angular y Angular Material
07:45 min - 32

Creación de Formularios Dinámicos con Reactive Forms en Angular
15:35 min
Estrategias avanzadas y optimización de formularios
- 33

Conexión de Componentes Propios a Reactive Forms en Angular
19:40 min - 34

Optimización de búsquedas con NGRX y HTTP en Angular
15:46 min - 35

Optimización de Búsquedas con Debounce Time en Angular
06:47 min - 36

Fundamentos de Accesibilidad Web para Desarrolladores
07:01 min - 37

Rendimiento y Optimización en Aplicaciones Angular
01:27 min
Subir Imágenes a FiberStorage con Angular y HTML
Resumen
Integrar la carga de archivos en una aplicación Angular con Firebase Storage permite transformar un simple formulario en una herramienta poderosa. En lugar de pegar manualmente la URL de una imagen pública, el usuario puede seleccionar un archivo directamente desde su computadora, subirlo a Firebase y obtener automáticamente la URL de descarga para asociarla a un formulario reactivo.
¿Cómo reemplazar un input de texto por un input de tipo file?
Angular Material no ofrece un componente nativo para inputs de tipo file, por lo que se utiliza el elemento HTML estándar. El proceso consiste en eliminar las directivas de Material como mat-input y transformar el campo en un <input type="file"> [1:30]. Es una solución sencilla que funciona perfectamente con HTML puro.
Una vez renderizado, el input permite al usuario explorar su sistema de archivos y seleccionar una imagen. Para reaccionar ante esa selección, se añade un evento de tipo change que dispara un método llamado uploadFile, recibiendo el evento nativo del navegador [2:28].
typescript uploadFile(event: Event) { const image = (event.target as HTMLInputElement).files[0]; const name = 'category.png'; const ref = this.storage.ref(name); const task = this.storage.upload(name, image); }
- Se extrae el archivo del arreglo
filesdel evento, tomando la posición cero para obtener una sola imagen. - Se define un nombre para el archivo, en este caso
category.png. - Se crea una referencia con
this.storage.ref()apuntando al nombre asignado. - Se genera una tarea de subida con
this.storage.upload()pasando el nombre y la imagen.
¿Qué es AngularFireStorage y cómo se inyecta?
AngularFireStorage es el servicio principal que conecta Angular con Firebase Storage. Se importa en el módulo de la aplicación y se inyecta como dependencia en el componente [3:18].
typescript constructor(private storage: AngularFireStorage) {}
Este servicio expone métodos como ref() para crear referencias a rutas dentro del bucket de almacenamiento, y upload() para iniciar la tarea de carga. Ambos son fundamentales para gestionar archivos desde el frontend.
¿Cómo obtener la URL final con finalize y snapshot changes?
La tarea devuelve un observable al que es posible suscribirse mediante snapshotChanges() [4:10]. Para detectar el momento exacto en que la carga finaliza, se aplica el operador finalize de RxJS dentro de un pipe.
typescript import { finalize } from 'rxjs/operators';
task.snapshotChanges().pipe( finalize(() => { const urlImage = ref.getDownloadURL(); urlImage.subscribe(url => { this.imageField.setValue(url); }); }) ).subscribe();
- finalize se ejecuta cuando el observable completa, garantizando que la imagen ya está disponible en el servidor [4:30].
ref.getDownloadURL()retorna otro observable con la URL pública de la imagen almacenada.- Con
setValuese asigna esa URL al campoimageFielddel formulario reactivo, llenándolo programáticamente sin necesidad de enlazarlo conformControlNameen el template.
¿Cómo mostrar una previsualización de la imagen subida?
Para mejorar la experiencia del usuario, se añade una etiqueta <img> cuyo src toma el valor del campo de imagen del formulario [5:50].
html <img *ngIf="imageField.value" [src]="imageField.value" />
- La directiva
*ngIfevita renderizar la imagen cuando el campo está vacío. - El
valuese actualiza automáticamente tras elsetValue, mostrando la previsualización en tiempo real.
¿Qué errores comunes aparecen al subir imágenes?
Un problema frecuente ocurre cuando el input de tipo file sigue enlazado a un formControlName [6:40]. En ese caso, el valor enviado al backend es la ruta local del archivo en vez de la URL de Firebase, lo que genera un error de validación indicando que no es una URL válida.
La solución es desligar el input del control del formulario y confiar exclusivamente en el setValue programático que se ejecuta dentro del finalize. De esta forma, solo se envía la URL correcta generada por Firebase Storage [7:12].
Tres retos interesantes quedan abiertos: mejorar el estilo visual del listado de categorías para mostrar las imágenes, generar un nombre aleatorio para cada archivo subido y así evitar conflictos de sobreescritura, y personalizar la apariencia del input file con estilos propios. ¿Cuál de estos retos resolverías primero?