No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Firebase 5 para Web

Curso de Firebase 5 para Web

Juan Guillermo Gómez Torres

Juan Guillermo Gómez Torres

Subiendo archivos de nuestro blog

23/32
Recursos

¿Cómo subir imágenes a Firebase storage desde un blog?

Subir imágenes a un servicio de almacenamiento en la nube, como Firebase, desde tu blog puede parecer complicado al principio, pero con el conocimiento adecuado, este proceso se simplifica. Aprenderemos cómo utilizar Firebase storage para almacenar imágenes cuando creamos un POST en un blog. Este proceso es esencial para mejorar la experiencia del usuario, permitiendo una carga y visualización eficiente de imágenes.

¿Cómo iniciar el setup de Firebase storage?

Para comenzar a almacenar imágenes, lo primero es añadir el script necesario a nuestro proyecto. Debemos integrar el script de storage de Firebase en el archivo índex de nuestro proyecto. Esto asegura que el almacenamiento de Firebase esté correctamente referenciado y accesible dentro de nuestras funciones.

¿Cómo configurar las referencias en Firebase storage?

Dentro de la funcionalidad para subir imágenes, necesitamos configurar referencias de almacenamiento. Estas referencias permiten organizar y determinar la ubicación exacta donde se guardarán las imágenes. Aquí está el código para realizar esta configuración:

const refStorage = firebase.storage().ref();
// Guardamos imágenes en el directorio 'imgs_post' bajo un subdirectorio para cada usuario
const imgRef = refStorage.child(`imgs_post/${user.uid}/${file.name}`);
  • Directorios Flexibles: Si los directorios especificados no existen, Firebase storage los crea automáticamente.
  • Identificador Único del Usuario (uid): Asignamos imágenes a un directorio basado en el uid del usuario, asegurando que los archivos estén organizados individualmente por usuario.

¿Cómo subir imágenes de manera asíncrona?

Subir archivos a la nube es un proceso que se ejecuta en segundo plano o de manera asíncrona. Esto significa que el proceso de carga se realiza mientras continuamos trabajando en otras tareas, y podemos observar este progreso en tiempo real.

imgRef.put(file).on(
    'state_changed',
    (snapshot) => {
        const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
        console.log('Upload is ' + progress + '% done');
    },
    (error) => {
        console.error('Error uploading file: ', error);
    },
    () => {
        imgRef.getDownloadURL().then((downloadURL) => {
            console.log('File available at', downloadURL);
            // guardar downloadURL en el almacenamiento local o usarlo directamente
        });
    }
);
  • Progreso de Subida: Podemos obtener el porcentaje de bytes subidos y así informar al usuario sobre el estado de la carga.
  • Manejo de Errores: Incluimos una función para capturar y mostrar errores que puedan ocurrir durante la carga.
  • URL de Descarga: Cuando el archivo se carga completamente, obtenemos su URL de descarga, lo cual es crucial para mostrar y usar la imagen subida posteriormente.

¿Cómo integrar la subida de imágenes con el POST de un blog?

Para asociar imágenes con un POST, es fundamental enviar esta información junto con el posteo en el blog:

  1. Recuperar el archivo desde el componente de subida.
  2. Llamar a la función de subir imagen con el archivo repuesto.
  3. Generar un POST incluyendo la URL de descarga en la base de datos.

¿Por qué es importante la organización de carpetas?

Organizar archivos por usuario en carpetas específicas ayuda significativamente al mantenimiento y escalabilidad del sistema. Cada usuario tiene su propio espacio, facilitando la gestión de datos personales y respetando las normas de seguridad y privacidad.

Recomendaciones finales

  • Prueba frecuentemente: Después de realizar cambios en el código, ejecuta pruebas para asegurar que todo funcione correctamente.
  • Cuidar los credenciales del usuario: No olvides manejar cuidadosamente los identificadores de usuario (uid) para evitar errores y mantener la integridad del sistema.
  • Monitorización del estado de carga: La retroalimentación visual de la carga de archivos es clave para mantener informado al usuario y mejorar su experiencia.

Estas prácticas mejoran la interacción usuario-sistema, asegurando un sistema de blog robusto y eficiente. Además, el manejo adecuado de Firebase storage permite que tu aplicación escale sin complicaciones. ¡Continúa explorando y dominando el poder de Firebase!

Aportes 18

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Si te sale “firebase.storage is undefined” yo lo solucione agregando en index.html

<script src="https://www.gstatic.com/firebasejs/5.5.2/firebase-storage.js"></script>

y en ConfigFirebase.js agregue el storageBucket que te lo proporciona el panel de firebase una vez activando el storage

Link actualizado firebase storage:

 <script src="https://www.gstatic.com/firebasejs/8.4.3/firebase-storage.js"></script>

Yo hice un componente de react para el progress bar

import React from 'react'

export default function ImgProgressBar(props) {
  return (
    <div>
        <div className="bg-blue-700 text-white flex" 
             style={{width: !props.progress ? "0%" : `${props.progress}%`}}>
            <span>Porcentaje de subida: </span>
            <span>{!props.progress ? "0%" : props.progress}</span>
        </div>
    </div>
  )
}

sin embargo, el progress bar se va al 100% de golpe…no se si es porque se sube muy rapido (aunque me causa ruido). Si es un bug mio, porfa ayudenme con la solucion 😃

Aqui les dejo mi commit de mi practica con nextjs
https://github.com/jlbousing/nextjs-firebase-practica/commit/e679a4656b494ff8a5f9c96e0275d70712e67491

Si sale un mensaje de error con el mensaje “firebase.storage is undefined” solo es cuestion de escribir bien el cdn o sdk asi que dejare el script para que todo funcione con normal

<script src="https://www.gstatic.com/firebasejs/7.12.0/firebase-storage.js"></script>

Y cómo descargo el archivo?

Hola, luego de ver el video de subir archivos a firebase quisiera saber que es mejor entre subir un archivo a firebase o convertir el archivo base 64 y colocarlo como un campo de un documento?

Hola, sucede que mis posts se crean y mi archivo (imagen en este caso) se sube a el storage de firebase, pero en el thumbnail del post no se muestra la imagen, en la consola solamente me dice esto.

post.js:41 Uncaught TypeError: Cannot read property ‘toDate’ of null
at post.js:41
at database.ts:1993
at document_set.ts:97
at o.inorderTraversal (sorted_map.ts:319)
at o.inorderTraversal (sorted_map.ts:320)
at n.inorderTraversal (sorted_map.ts:136)
at o.forEach (document_set.ts:96)
at e.forEach (database.ts:1992)
at Object.next (post.js:34)
at next (database.ts:1819)
at async_observer.ts:51

@firebase/firestore: Firestore (6.4.0):
The timestampsInSnapshots setting now defaults to true and you no
longer need to explicitly set it. In a future release, the setting
will be removed entirely and so it is recommended that you remove it
from your firestore.settings() call now.

Hola a todos por ver esta publicación.

Quien me hacer el favor de decirme como se hace para que mi archivo enviando al hosting no solo se vea en una sola ruta del proyecto, es decir que de la sección principal se vea también en mi actividad personal, en pocas palabras estén conectadas.

Gracias a todos

Link actualizado firebase storage

No se encuentra en los primeros pasos de firebase , en todo caso guiarse de los que se encuentra y solo cambiar la ultima parte por firebase-storage.js

<script src="https://www.gstatic.com/firebasejs/8.6.8/firebase-storage.js"></script>

Es genial que firebase te de esl status de la carga del archivo, esto siempre el útil para archivos pesados:D!

Existe alguna forma de aplicar transacción a estas activades?.
Es decir, revertir la tarea de registro o subida si algunas de estas no se lleva a cabo correctamente

Muy bien explicado.

Que pasa si al final el usuario cancela la creación del post o no queria subir esa imagen, estariamos almacenando la imagen que no seria util/necesaria

no entiendo el sessionStorage para que se usa? y no entiendo como lo usa para guardar la url a la bd?

se pueden subir vídeos del ordenador en el blog?

Sensacional Profesor, siempre quise saber como se hacia esto

Hola mi pregunta es como podria subir mas de un archivo, digase dos o tres fotos o pdf

Si el post no se llega a publicar o el usuario decide cambiar de imagen, se puede hacer una función que borre el archivo subido, pero eso funciona si el usuario cierra el formulario o la imagen de forma normal. En caso de que cierre la página, cómo haríamos para no almacenar archivos basura???