Firebase云存储on_object_finalized触发器通过通配符规则监控指定文件夹的实现方法咨询
Firebase云存储on_object_finalized触发器通过通配符规则监控指定文件夹的实现方法咨询
你好呀!其实完全可以通过通配符规则来实现监控指定文件夹的需求,你当前的写法问题出在path参数的语法上——Firebase Cloud Functions的存储触发器并不支持直接用path参数定义文件夹路径,而是需要通过conditions参数来配置路径匹配规则。
给你整理了正确的实现方式:
1. 基础的指定文件夹触发配置
你可以用conditions参数搭配通配符模式,来匹配目标路径下的文件:
@storage_fn.on_object_finalized( bucket='XXX.appspot.com', conditions=[ # ** 匹配该文件夹下所有文件(包括子文件夹内的文件) ['matches', 'name', '{user_id}/audio/**'] ], timeout_sec=540, memory=options.MemoryOption.GB_32 ) def process_audio_file(event: storage_fn.CloudEvent[storage_fn.StorageObjectData]): # 你的音频文件处理逻辑
如果只想匹配audio文件夹下直接存放的文件(不包含子文件夹),可以把通配符改成*:
['matches', 'name', '{user_id}/audio/*']
2. 额外添加音频文件格式过滤
既然你的函数是处理音频文件,还可以再加个条件过滤文件后缀,避免非音频文件触发函数,让逻辑更精准:
@storage_fn.on_object_finalized( bucket='XXX.appspot.com', conditions=[ ['matches', 'name', '{user_id}/audio/**'], ['matches', 'name', '*.mp3'], ['matches', 'name', '*.wav'], ['matches', 'name', '*.m4a'] # 可根据需要添加其他音频格式后缀 ], timeout_sec=540, memory=options.MemoryOption.GB_32 ) def process_audio_file(event: storage_fn.CloudEvent[storage_fn.StorageObjectData]): # 你的音频文件处理逻辑
3. 提取通配符中的user_id值
如果需要在函数里获取路径中的user_id,可以通过解析文件路径实现:
def process_audio_file(event: storage_fn.CloudEvent[storage_fn.StorageObjectData]): file_full_path = event.data['name'] # 拆分路径提取user_id user_id = file_full_path.split('/')[0] # 后续处理逻辑
备注:内容来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

