是否可以将 Firebase 函数的范围限定在存储桶内的文件夹中?

Is it possible to scope Firebase functions to a folder inside a storage bucket?

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

是否可以将函数的范围限定在我的存储桶内的文件夹中,如果是的话如何? 或者我需要有多个存储桶而不是文件夹来分隔不同的任务。

firebaser 在这里

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

作为解决方法,您可以将有关图像的元数据写入支持的数据库(实时数据库或 Cloud Firestore),并使用它来触发转换文件的 Cloud Functions。这是我通常做的,因为它还允许我以可以查询的格式捕获元数据。

您可以查看函数内部。在您的函数中获取 "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;
}

请注意,Google 云存储在平面文件系统上运行。所以实际上没有目录。如果你正在存储一个像 /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;
    }
});