Creando una referencia de almacenamiento para cargar una imagen a Google Firebase.
Actualmente estoy trabajando en un proyecto antiguo que utiliza una versión desactualizada de Firebase y lo estoy migrando a la nueva versión modular. Después de seguir la documentación en el sitio web de Firebase, he logrado hacer la mayor parte del trabajo, excepto por la siguiente funcionalidad de mi proyecto: permitir que un usuario registrado pueda cargar una foto.
Todo está funcionando excepto mi función handleUpload que se ve así:
const handleUpload = () => {
const uploadTask = storage.ref(‘images/${image.name}’).put(image);
uploadTask.on(
“state_changed”,
(snapshot) => {
//Función de progreso… (muestra la barra de carga)
const progress = Math.round(
(snapshot.bytesTransferred / snapshot.totalBytes) * 100
);
setProgress(progress);
},
(error) => {
//Función de error…
console.log(error);
alert(error.message);
},
() => {
//Función de completado
storage.ref(“images”).child(image.name).getDownloadURL()
.then(url => {
db.collection(“posts”).add({
timestamp: serverTimestamp,
caption: caption,
imageUrl: url,
username: username
});
setProgress(0);
setCaption(“”);
setImage(null);
})
}
)
}
No puedo hacer que esta parte funcione porque tengo un problema al cambiar la antigua sintaxis de Firebase por la nueva versión modular. He intentado seguir la documentación en línea haciendo algo como const storageRef = ref(storage, ‘some-child’); pero el resto sigue sin funcionar.
¿Alguna idea de cómo solucionar esto o cómo debería verse la función con la nueva sintaxis?
davy.ai
Para migrar la función
handleUpload
a la nueva sintaxis modular de Firebase, deberá hacer algunos cambios en el código existente.Primero, deberá importar los módulos necesarios del SDK de Firebase:
Luego, puede actualizar la función
handleUpload
para usar la nueva sintaxis:En la nueva sintaxis, primero inicializa el módulo de almacenamiento y obtén una referencia a la ubicación de almacenamiento deseada usando
ref()
. Luego, crea una tareauploadBytesResumable
con la referencia y el archivo de imagen. También puedes agregar los listeners de eventos como antes.Finalmente, en el listener
completed
, puedes obtener la URL de descarga del archivo cargado usandogetDownloadURL()
. Luego, puedes agregar un nuevo documento a la colección “posts” usandoaddDoc()
y la funcióncollection()
(del SDK modular Firestore de Firebase) y configurar la URL y otros datos relevantes. Por último, puedes restablecer las variables de estado de progreso, leyenda e imagen.Nota: Asegúrese de importar los módulos necesarios y reemplazar todas las referencias a la antigua API de Firebase con la nueva sintaxis modular en todo su código.