unción de nube @Firebase [Error: límite de memoria excedido. La función de invocación fue interrumpida.] En youtube video upload
Intenté subir videos a YouTube usando la función de nube Firebase.
Lo que necesito es cuando un usuario carga un video en el almacenamiento en la nube de Firebase, se activará el evento functions.storage.object (). OnFinalize y, en ese caso, almaceno el archivo en una ubicación temporal y subo el archivo a youtube desde el ubicación temporal a youtube, después de cargarlo elimino ambos archivos.
Funcionará bien para archivos pequeños.
Pero si subo un archivo grande, la función se termina mostrando este error
Error: límite de memoria excedido. La función de invocación fue interrumpida.
Código para subir video
var requestData = {
'params': {
'part': 'snippet,status'
},
'properties': {
'snippet.categoryId': '22',
'snippet.defaultLanguage': '',
'snippet.description': "docdata.shortDesc",
'snippet.tags[]': '',
'snippet.title': "docdata.title",
'status.embeddable': '',
'status.license': '',
'status.privacyStatus': 'public',
'status.publicStatsViewable': ''
}, 'mediaFilename': tempLocalFile
};
insertVideo(tempLocalFile, oauth2Client, requestData);
función de video de inserción
function insertVideo( file, oauth2Client, requestData) {
return new Promise((resolve,reject)=>{
google.options({ auth: oauth2Client });
var parameters = removeEmptyParameters(requestData['params']);
parameters['auth'] = oauth2Client;
parameters['media'] = { body: fs.createReadStream(requestData['mediaFilename'])};
parameters['notifySubscribers'] = false;
parameters['resource'] = createResource(requestData['properties']);
console.log("INSERT >>> ");
let req = google.youtube('v3').videos.insert(parameters, (error, received)=> {
if (error) {
console.log("in error")
console.log(error);
try {
fs.unlinkSync(file);
} catch (err) {
console.log(err);
} finally{
// response.status(200).send({ error: error })
}
reject(error)
} else {
console.log("in else")
console.log(received.data)
fs.unlinkSync(file);
resolve();
}
});
})
}
code para crear un archivo local temporal
bucket.file(filePath).createReadStream()
.on('error', (err)=> {
reject(err)
})
.on('response', (response)=> {
console.log(response)
})
.on('end', ()=> {
console.log("The file is fully downloaded");
resolve();
})
.pipe(fs.createWriteStream(tempLocalFile));
Cada archivo de lectura y escritura es manejado por flujos, cualquier idea de por qué está ocurriendo el problema de memoria