指定要使用 Google Cloud Storage 通知发布的元数据

Posted

技术标签:

【中文标题】指定要使用 Google Cloud Storage 通知发布的元数据【英文标题】:Specifying Metadata to publish with Google Cloud Storage Notifications 【发布时间】:2019-05-14 08:30:29 【问题描述】:

在this thread 的帮助下,我已经开始使用 gsutil 命令:

gsutil notification create \
-t bucketcfpubsub -f json \
-e OBJECT_FINALIZE gs://bucketcfpubsub

我通过它发布了这条消息:

b'\n "kind": "storage#object",\n "id": "bucketcfpubsub/test.txt/1544681756538155",\n "selfLink": "https://www.googleapis.com/storage/v1/b/bucketcfpubsub/o/test.txt",\n "name": "test.txt",\n "bucket": "bucketcfpubsub",\n "generation": "1544681756538155",\n "metageneration": "1",\n "contentType": "text/plain",\n "timeCreated": "2018-12-13T06:15:56.537Z",\n "updated": "2018-12-13T06:15:56.537Z",\n "storageClass": "STANDARD",\n "timeStorageClassUpdated": "2018-12-13T06:15:56.537Z",\n "size": "1938",\n "md5Hash": "sDSXIvkR/PBg4mHyIUIvww==",\n "mediaLink": "https://www.googleapis.com/download/storage/v1/b/bucketcfpubsub/o/test.txt?generation=1544681756538155&alt=media",\n "crc32c": "UDhyzw==",\n "etag": "CKvqjvuTnN8CEAE="\n\n'

你可以看到它更“可读”here

但是,this documentation guide 暗示我们可以将其缩减为我们感兴趣的特定元数据。例如,带有“objectId”的文件名。但它并没有确切说明如何通过 gsutil 实现这一点。在上面的文字墙中,还有“timeCreated”和“size”。

我想设置一个通知,将上传的文件名作为 MESSAGE 输出,并将 timeCreated 和 size 作为属性输出。

谁能解释一下如何操纵输入代码来实现这一点?

【问题讨论】:

【参考方案1】:

无法将有效负载更改为仅包含字段的子集。如果您为payloadFormat 指定JSON_API_V1,则通知负载始终包含完整的对象元数据。

唯一的选择是将payloadFormat 设置为NONE。这根本不会发送任何有效负载,但您仍然可以从通知的attributes 中额外提供一些信息。对于您的用例,属性包含objectId,但不包含sizetimeCreated。对于这些附加字段,您需要阅读完整的有效负载。

要使用 gsutil 指定无负载,请使用 -f none 选项。详情见: https://cloud.google.com/storage/docs/gsutil/commands/notification#options

【讨论】:

以上是关于指定要使用 Google Cloud Storage 通知发布的元数据的主要内容,如果未能解决你的问题,请参考以下文章

抛开价格不谈,为啥要选择 Google Cloud Bigtable 而不是 Google Cloud Datastore?

Google Cloud Messaging VS Google Cloud Platform

使用 Google 的 Cloud HSM 签署可执行文件

GCM(Google Cloud Messaging)是不是需要 Google 帐户?

Google Cloud Storage 存储桶抛出错误“要计费的项目与已关闭的计费帐户相关联。”

如何使用 API 存储在 Google Cloud Storage 中的架构文件在 BigQuery 加载作业上设置架构?