通过Firebase函数将文件下载到Firebase存储



我有一个程序,允许用户将视频文件上传到firebase存储。如果文件不是mp4,我会将其发送到第三方视频转换网站,将其转换为mp4。他们点击了一个webhook(firebase函数(,其中包含URL和关于转换后的文件的其他信息。

现在我正在尝试将该文件下载到firebase函数中的tmp目录,然后将其发送到firebase存储。我有以下问题。

  1. 我可以绕过将文件下载到函数tmp目录,直接将其保存到存储中吗?如果是,如何?

  2. 我目前在下载到函数tmp时遇到问题。下面是我的代码。函数返回Function execution took 6726 ms, finished with status: 'crash'

export async function donwloadExternalFile(url:string, fileName:string) {
try {

const axios  = await import('axios')
const fs = await import('fs')  
const workingDir = join(tmpdir(), 'downloadedFiles')
const tmpFilePath = join(workingDir, fileName) 
const writer = fs.createWriteStream(tmpFilePath);
const response = await axios.default.get(url, { responseType: 'stream' })
response.data.pipe(writer);
await new Promise((resolve, reject) => {
writer.on('error', err => {
writer.close();
reject(err);
});
writer.on('close', () => {
resolve();
});
});
return 
} catch (error) {
throw error 
}
}

如上评论部分所述,您可以使用云存储Node.js SDK将文件上传到云存储。

请查看SDK客户端参考文档,您可以在其中找到有关此云存储客户端库的大量示例和更多信息。

此外,我想提醒您,您可以通过使用管道来绕过对/tmp的写入。根据Cloud Functions的文档;您可以在云存储上处理一个文件,方法是创建一个读取流,通过基于流的进程将其传递,然后将输出流直接写入云存储">

最后但并非最不重要的是,始终从云功能的本地系统中删除临时文件。如果不这样做,最终可能导致内存不足问题和随后的冷启动。

最新更新