Puedo crear un archivo JavaScript de 300 bytes con fs.writeFileSync, y puedo ver el contenido del archivo con fs.readFileSync (al menos en un registro de la consola), pero no entiendo cómo usar más este archivo para subirlo a Firebase Storage, me da un error que dice "Excepción de una función finalizada: Error: ENOENT: no existe tal archivo o directorio, stat '/widget-62a6e3d160781a477aea435c.js'"
Supongo que no está en un directorio porque fs crea un archivo en un búfer. Este es el código:
fs.writeFileSync(fileName, widgetContent); console.log(fs.readFileSync(fileName, 'utf8')) admin.initializeApp({ credential: admin.credential.cert(serviceAccount), storageBucket: "gs://chatbot-eebb1.appspot.com" }); var bucket = admin.storage().bucket(); //bucket.upload(fs.readFileSync(fileName, 'utf8')) //bucket.upload(fileName) bucket.upload(fs.createReadStream(fileName, { highWaterMark: 1024 }))Entonces también probé esto:
bucket.upload(fs.createReadStream(fileName, { highWaterMark: 1024 }))Pero obtuve un error "Excepción de una función finalizada: TypeError [ERR_INVALID_ARG_TYPE]: el argumento "ruta" debe ser de tipo cadena. Recibió una instancia de class_1 "
Entonces, de todos modos, cuando usa fs.writeFileSync, ¿dónde va el archivo? ¿A un búfer? Si es así, ¿cómo accedería a este archivo para cargarlo en Firebase Storage con su SDK?
Para empezar, fs.writeFileSync , fs.readFileSync y fs.createReadStream están todos leyendo/escribiendo un archivo (llamado el valor de fileName ) en el directorio de trabajo actual del código.
A continuación,Bucket#upload() toma una cadena de ruta de archivo como primer argumento, no una secuencia. Esto es lo que significa El argumento "ruta" debe ser de tipo cadena. Recibió una instancia de class_1 .
Entonces, para corregir su llamada, podría usar simplemente bucket.upload(fileName) en su lugar.
Sin embargo, ¿por qué no escribir widgetContent directamente en Cloud Storage usando File#save() en lugar de escribir en el disco y luego cargarlo?
admin.initializeApp({ credential: admin.credential.cert(serviceAccount), storageBucket: "gs://chatbot-eebb1.appspot.com" }); const bucket = admin.storage().bucket(); // make sure to return the Promise to the calling function return bucket.file(fileName) .save( widgetContent, // this can be a string or byte array { public: true } // see https://googleapis.dev/nodejs/storage/latest/global.html#CreateWriteStreamOptions for options ) .then( () => { // upload complete, do something }, (err) => { // upload failed, do something } )