Estoy tratando de agregar un mapa a una clave en fire-store. Se vuelve undefined en la consola y está agregando un mapa vacío en firetsore.
Estoy cargando varios archivos a la vez en el almacenamiento y obteniendo imageUrls. imageUrls={0:0.png,1:1.png} de esta función.
const onUploadFiles = async (images) => { let imageUrls = {}; Promise.all( images.map(async (image) => { const fileRef = storage.ref(`${scanID}/${chapterNumber}/${image.name}`); await fileRef.put(image); imageUrls[getFileName(image.name)] = await fileRef .getDownloadURL() .toString(); console.log(imageUrls[getFileName(image.name)]); }) ); return imageUrls; };Una vez que se cargan los archivos, intento agregar este mapa a un documento y agregarlo en firestore.
Función de utilidad para almacenar el nombre del archivo como clave. const getFileName = (name) => name.replace(/\.[^/.]+$/, '');
Agregar estas url como un documento.
//add chapter to firestore const addChapter = async (images) => { var chapter = { id: uuidv4(), title: title, chapterNumber: chapterNumber, }; await onUploadFiles(images) .then((imageUrls) => { chapter['images'] = imageUrls; }) .catch((error) => { console.log('Something went wring with database'); }); db.collection('chapters') .doc(scanID) .set( { [chapterNumber]: chapter, }, //merge { merge: true } ) .then(() => { console.log('Done'); }); };Rendimiento esperado:
{ "0":{ "title":"title 1", "id":"232131-321-312-331", "chapterNumber":0, "images":{ "0":"0.png", "1":"1.png" } } } Obtengo un mapa vacío {} en firestore.
Si no me malinterpreta, le gustaría cargar las imágenes primero en depósitos de Firebase Cloud Storage y luego recuperar las URL de descarga para incluirlas en un documento que está creando para una colección de Firestore. Si ese es el caso, en esta pregunta relacionada hay un script que puede ayudarlo a cargar imágenes en Firebase Storage. He probado este script y funciona en mi entorno de nodo de prueba. Algo que noté de su código y el script que vinculé es que no hay una propiedad firebaseStorageDownloadTokens que proporcione un token de descarga para sus URL:
const metadata = { metadata: { // This line is very important. It's to create a download token. firebaseStorageDownloadTokens: uuid() }, ...He enlazado una guía relacionada con la descarga de tokens y cómo crearlos y obtenerlos. Finalmente, en cuanto a cómo crear objetos Map a partir de una variable para agregar a Firestore, la documentación brinda un ejemplo de un objeto para Firestore:
const data = { stringExample: 'Hello, World!', booleanExample: true, numberExample: 3.14159265, dateExample: admin.firestore.Timestamp.fromDate(new Date('December 10, 1815')), arrayExample: [5, true, 'hello'], nullExample: null, //Map object objectExample: { a: 5, b: true } };