如何通过签名URL上传GCS对象时,使用Cloud Pub / Sub发送自定义数据

时间:2017-04-12 04:50:04

标签: google-app-engine google-cloud-storage google-cloud-pubsub

我可以使用以下方式设置Google云存储云发布/订阅通知

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

每次将对象上传到GCS时,我的App Engine servlet都会正确收到消息。我使用签名URL将我的对象上传到GCS。

但是,在使用签名URL上传对象时,我不确定如何从客户端设置自定义键值对。上面的gsutil命令允许您设置一个键:值对,但它会对其进行硬编码,因此无用。在我的客户端,我想设置一些键:值对user : some-user,所以在我的servlet中我可以做一些额外的App Engine,比如写入数据库。

我尝试在metadata标记中上传一些标题,如here所示,但是从servlet中的HttpServletRequest获取这些标题似乎不起作用。

另外,我如何发送subscriptionUniqueToken,因为没有解释如何做到这一点。

注意:使用Java

1 个答案:

答案 0 :(得分:0)

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

"客户代币"是对象更改通知特有的功能。与Cloud Pub / Sub集成等效的是" custom_attributes",通知配置的用户指定属性,作为额外属性附加到每个通知。你可以添加一个" unique_token"属性并附加一个值,如果你愿意的话。

使用签名网址时,使用以x-goog-meta-开头的HTTP标头设置自定义元数据。例如,x-goog-meta-stuff: Foo将创建自定义属性对" stuff:Foo"。