【发布时间】:2019-04-16 12:39:22
【问题描述】:
我正在尝试使用 firebase 云功能将视频上传到 youtube。
我需要的是当用户将视频上传到 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));
每个文件的读取和写入都由流处理,不知道为什么会发生内存问题
【问题讨论】:
-
Hey Suhail,想知道如果您使用云功能来处理事件,您是如何设置 oauth2Client 的。您如何获得浏览器访问权限以建立 OAuth?谢谢!!!
-
我使用了 oauth 操场,developers.google.com/oauthplayground
-
太酷了!我会看看。顺便说一句,生成令牌后,您将其放在服务器的哪个位置以便云功能可以访问它?非常感谢!
-
添加到配置中
-
抱歉 Suhail,你能说得更具体点吗?真的很抱歉我是这个云功能的新手????。配置在哪里?是火力基地吗?
标签: node.js firebase google-cloud-functions youtube-data-api