如何借助Cloud Functions与Cloud Storage Trigger判断对象是否为文件夹
准确判断Cloud Storage新建对象是否为文件夹类型
你之前依赖contentType: application/octet-stream判断文件夹的方式不可靠,因为很多二进制文件(比如.drawio)也会使用这个通用MIME类型,导致误判。
Cloud Storage本身没有真正的文件夹概念,所谓的“文件夹”分两种情况:
- 显式文件夹对象:用户手动创建文件夹时,GCS会生成一个名称以
/结尾、大小为0字节的占位对象,这类对象会触发onObjectFinalized事件。 - 隐式路径前缀:上传文件(比如
docs/image.png)时自动生成的路径前缀docs/,GCS不会创建对应的对象,因此不会触发你的触发器。
只需针对显式文件夹对象做判断即可,修改后的代码如下:
export const resizeImage = onObjectFinalized({ }, async (event: CloudEvent<StorageObjectData>) => { const fileBucket = event.data.bucket; const filePath = event.data.name as string; const fileSize = parseInt(event.data.size || '0', 10); // 转换为数字,默认值设为0 // 准确判断是否为文件夹对象 if (filePath.endsWith('/') && fileSize === 0) { return logger.log("Object created is a folder. Skipping processing."); } /* ...more code */)}
这个判断逻辑通过两个核心特征锁定文件夹对象:名称以/结尾、文件大小为0,完全避免了MIME类型带来的误判问题。
内容的提问来源于stack exchange,提问作者Lucas David Ferrero
相关产品推荐
相关产品推荐

