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

Posted

技术标签:

【中文标题】是否可以将 Firebase 函数的范围限定为存储桶内的文件夹?【英文标题】:Is it possible to scope Firebase functions to a folder inside a storage bucket? 【发布时间】:2018-01-06 08:09:45 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

firebaser 在这里

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

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

【讨论】:

谢谢弗兰克,解决了。我希望在未来这将成为可能,因为它使事情变得更容易一些。 也许您可以通过侦听 Storage 中创建的任何内容来解决问题,然后参考该新文件创建一个数据库节点,然后只为其中一些节点创建一个侦听器 这仍然是唯一的方法吗?这样即使在不需要时也会触发该功能! 这很糟糕。它基本上会导致不必要的通话,因此可能会收取任何费用......【参考方案2】:

您可以检查函数内部。获取函数上的“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;

【讨论】:

感谢您的回复,但我会尽量避免在不需要时触发我的功能。【参考方案3】:

请注意,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;
    
);

【讨论】:

以上是关于是否可以将 Firebase 函数的范围限定为存储桶内的文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

intelliJ -> 有啥方法可以将您的搜索范围限定在一个函数内

离线成员函数定义是不是需要完全限定的类名到全局范围?

将 SQL 范围限定为国际日期变更线上的边界框

是否可以使用 Firebase 存储将多个图像添加到 Firebase 数据库? - 颤振

函数输入参数类型为枚举时,则限定函数参数的接收范围,非枚举值输入则错误

Firebase 存储规则在 Firestore 文档上查找数据? [复制]