当通过 Signed URL 上传 GCS object 时,如何使用 Cloud Pub/Sub 发送自定义数据

How to send custom data with Cloud Pub/Sub when GCS object is uploaded via a Signed URL

我能够使用以下方式设置 Google Cloud Storage Cloud Pub/Sub 通知:

gsutil notification create -t [TOPIC_NAME] -m my-key:my-value -f json gs://[BUCKET_NAME]

每次 object 上传到 GCS 时,我的 App Engine servlet 都会正确收到一条消息。我使用已签名的 URL.

将我的 object 上传到 GCS

但是,我不确定在上传带签名 URL 的 object 时如何从我的客户端设置自定义 key-value 对。上面的 gsutil 命令可以让你设置一个 key:value 对,但是它 hard-codes 它是没有用的。在我的客户端中,我想设置一些 key:value 对,例如 user : some-user,然后在我的 servlet 中,我可以做一些额外的 App Engine 操作,例如写入数据库。

我尝试在 metadata 标签中上传一些 headers,如图 here 但从 servlet 中的 HttpServletRequest 获取那些 headers 没有似乎工作。

此外,我该如何发送 subscriptionUniqueToken,因为没有关于如何发送的解释。

注:使用Java

在大多数情况下不再需要唯一令牌的概念。 Object 向它们提供更改通知是因为它们通过将未经身份验证的 HTTPS 调用发送到可配置端点来工作。如果发现该端点,则恶意用户也可以发送此类调用。但是,云 Pub/Sub 通知将消息发布到作为已知服务帐户的主题,只要没有恶意第三方也被授予该主题的发布权限,他们就无法干预。如果需要,您可以包含一个唯一令牌作为第二个保护机制,但通常没有必要。

"Client tokens" 是 Object 变更通知特有的功能。与 Cloud Pub/Sub 集成等效的是通知配置的 "custom_attributes"、user-specified 属性,这些属性作为额外属性附加到每个通知。如果需要,您可以添加 "unique_token" 属性并附加一个值。

使用签名 URL 时,设置自定义元数据是通过 HTTP headers 开头 x-goog-meta- 完成的。例如,x-goog-meta-stuff: Foo 将创建自定义属性对 "stuff: Foo".