¿Cómo escribir y recuperar un archivo binario temporal con el nodo Js?

Problema

Estoy trabajando con Google Text To Speech ( TTS ) para guardar un archivo de audio binario generado en Google Cloud Storage ( GCS ) .

Guardar un archivo binario local no parece ser una buena idea en el entorno de funciones en la nube de Firebase. ¿Por lo tanto, estoy viendo cómo escribir y recuperar un archivo binario temporal? Cuando bash recuperar el archivo temporal creado actualmente, recibo un error.

En la solución intentada a continuación, el archivo temporal se muestra como guardado en el registro, luego estoy intentando recuperar el archivo temporal en la parte correcta de la callback de creación de archivo.

Error

Error: Cannot parse JSON response at ApiError (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:43:9) at Util.parseHttpRespBody (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:167:42) at Util.handleResp (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:116:117) at retryRequest (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:403:22) at onResponse (/user_code/node_modules/@google-cloud/storage/node_modules/retry-request/index.js:200:7) at /user_code/node_modules/@google-cloud/storage/node_modules/teeny-request/build/src/index.js:158:17 at process._tickDomainCallback (internal/process/next_tick.js:135:7) 

Intento de solucion

 const admin = require('firebase-admin'); const functions = require('firebase-functions'); const path = require('path'); const os = require('os'); const {Storage} = require('@google-cloud/storage'); const projectId = 'coinverse-media-staging'; const storage = new Storage({ projectId: projectId, }); const fs = require('fs'); const textToSpeech = require('@google-cloud/text-to-speech'); const client = new textToSpeech.TextToSpeechClient(); admin.initializeApp(); const text = 'Hello, world!'; const request = { input: {text: text}, // Select the language and SSML Voice Gender (optional) voice: {languageCode: 'en-US', ssmlGender: 'NEUTRAL'}, // Select the type of audio encoding audioConfig: {audioEncoding: 'MP3'}, }; exports.getAudiocast = functions.https.onCall((data, context) => { var bucket = storage.bucket('gs://[project-name].appspot.com/content/feeds/en-audio/'); client.synthesizeSpeech(request, (err, response) => { if (err) { console.error('ERROR:', err); return; } const tempFile = path.join(os.tmpdir(), (data.id + '.mp3')); fs.writeFile(tempFile, response.auioContent, 'binary', err => { if (err) { console.error('ERROR:', err); return; } console.log('Audio content written to file: ' + tempFile); bucket.upload(tempFile), function(err, file) { if (!err) { console.log('Audiocast uploaded!'); } else { console.error('Audiocast upload error: ' + err.message); } }; }); }); return { filePath: "cloudStorage/someFilePath", }; }); 

Próximo paso

Intentaré cargar un archivo de texto normal en lugar del archivo binario para ver si el problema es el formato del archivo temporal.

Gracias a @Doug_Stevenson y @AndersonMendes por la orientación!

Solución

Incluí tanto la identificación del depósito en Google Cloud Storage como la ruta del archivo en la misma cadena que fue la fuente del error.

Cadena de cubo

var bucket = storage.bucket('gs://[projectName].appspot.com');

Método de carga GCS

 bucket.upload(tempFile, { destination: ("directory/someFolderName/" + fileName) }, (err, file) => { if (!err) { console.log('Audiocast uploaded!'); } else { console.error('Audiocast upload error: ' + err.message); } });