首页 > 解决方案 > Firebase 存储桶下载文件需要很长时间

问题描述

我正在开发一个使用 Firebase 作为 BaaS 的应用程序。

我在上传图像(90KB 或更少)并触发云功能时遇到时间问题。

我的触发器在上传结束时开始:

exports.uploadControl = functions.storage.object().onFinalize((req, res) => {
    uploadControl.handler(req, res);
    return 0;
});

而且,在 uploadControl 中,我有:

return mkdirp(tempLocalDir).then(() => {
    console.log('1. mkDirp - OK!');
    console.log('2. Download starts...');
    return bucket.file(filePath).download();
}).then((content) => {
    console.log('3. Download ends');
    return 0;
});

这段代码工作正常,但问题是第 2 步和第 3 步之间花费的时间......它需要 24 秒或更长时间。

如何解决这个问题?代码有问题吗?还是有 Firebase 设置来解决它?

谢了。

标签: node.jsfirebasegoogle-cloud-functionsfirebase-storage

解决方案


这里有两点错误:

  1. onFinalize() 回调不会接收res,而reqHTTP 触发器之类的对象会接收。它接收对象元数据作为第一个参数。 阅读文档了解详细信息。

  2. 当所有工作完成时,像这样的后台触发器必须返回一个承诺。否则 Cloud Functions 会提前关闭工作,因为它不知道何时完成。如果你想从另一个函数开始所有的工作,它应该返回那个承诺。

-

exports.uploadControl = functions.storage.object().onFinalize(object => {
    return uploadControl.handler(object);
});

推荐阅读