繁体   English   中英

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

[英]Download file to Firebase Storage via Firebase Functions

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

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

  1. 我可以绕过将文件下载到函数 tmp 目录并直接将其保存到存储中吗? 如果是这样怎么办?

  2. 我目前无法下载到函数 tmp dir 下面是我的代码。 function 正在返回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 
    }

  }

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

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

另外,我想提醒您,您可以使用管道绕过写入/tmp 根据 Cloud Functions 的文档“您可以通过创建读取 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ,将其传递给基于流的进程,然后将 output ZF7B44CFAFD5C52223D7D5498196C8A2 直接写入 Cloud Storage 来处理 Cloud Storage 上的文件。”

最后但同样重要的是,始终从 Cloud Function 的本地系统中删除临时文件。 不这样做最终会导致内存不足问题和随后的冷启动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM