是否可以将Firebase功能范围扩展到存储桶中的文件夹?

时间:2017-07-30 20:15:57

标签: firebase google-cloud-storage firebase-storage google-cloud-functions

我已成功测试Firebase功能以进行存储。但是,我没有看到任何提示如何仅在将文件添加到我的存储桶中的文件夹时调用该函数。关于确定函数范围的唯一提示是针对不同的桶here

是否可以将功能范围扩展到我的存储桶中的文件夹,如果是,如何? 或者我需要多个存储桶而不是文件夹来分隔不同的任务。

4 个答案:

答案 0 :(得分:9)

firebaser here

目前无法仅针对云存储中特定文件夹中的写入触发云功能。如果要将触发限制为项目中文件的子集,则将它们放在单独的存储桶中是目前实现此目的的唯一方法。

作为一种变通方法,您可以将有关映像的元数据写入支持的数据库(Realtime Database或Cloud Firestore),并使用该元数据触发转换文件的Cloud Function。这就是我通常所做的事情,因为它还允许我以可查询的格式捕获元数据。

答案 1 :(得分:3)

您可以在功能内部进行检查。获取函数中的“filePath”或“fileDir”,并检查它是否是您想要的文件夹。

const path = require('path');
const filePath = event.data.name;
const fileDir = path.dirname(filePath);

//if you want to check the posts folder only then:

if (fileDir != 'posts') {
    console.log('This is not in post folder');
    return null;
}

答案 2 :(得分:2)

请注意,Google Cloud Storage可在平面文件系统上运行。因此,实际上没有目录。如果要存储/users/profile_pictures/photo.jpg之类的文件,则基本上是文件名的全部。因此,实际上,没有目录。只有文件。这就是为什么目录本身不能具有触发器的原因。当然,您可以通过检查文件本身的名称并查看其开头是否与特定字符串匹配来解决该问题。

export const generateThumbnailTrigger = functions.storage.object().onFinalize(async (object) => {
    const filePath = object.name;
    if (filePath?.startsWith('temp/')) {
        console.log('start doing something with the file');
    } else {
        return false;
    }
});

答案 3 :(得分:0)

您可以使用

收听特定路径
 exports.generateThumbnail = functions.storage.object('profile').onFinalize(async object => {

})