Позаботьтесь о том, чтобы правильно обрабатывать ошибки (возможно, повторно вставив блок в тему pubsub).
ался загрузить видео на YouTube с помощью облачной функции Firebase.
Что мне нужно, это когда пользователь загружает видео в облачное хранилище firebase, запускается событие functions.storage.object (). OnFinalize, и в этом случае я сохраняю файл во временном месте и загружаю файл на YouTube из временного хранилища. местоположение на YouTube, после загрузки я удаляю оба файла.
Это будет хорошо работать для небольших файлов.
Но если я загружаю большой файл, то функция завершается, показывая эту ошибку
Ошибка: превышен лимит памяти. Вызов функции был прерван.
Код для загрузки видео
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);
вставить видео функцию
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();
}
});
})
}
код для создания временного локального файла
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));
Каждый файл для чтения и записи обрабатывается потоками, любая идея о том, почему происходит проблема с памятью