将自定义元数据设置为 Google Cloud Storage 中的对象

Posted

技术标签:

【中文标题】将自定义元数据设置为 Google Cloud Storage 中的对象【英文标题】:Setting Custom metadata to an object in Google Cloud Storage 【发布时间】:2020-04-24 21:25:36 【问题描述】:

我有一个 android 应用,可以将文件上传到 Firebase Storage 中的存储桶。当它这样做时,它会添加自定义元数据userId。 当我使用gsutil 使用docs 中的以下命令从我的计算机上传文件时:

gsutil -h x-goog-meta-userId:<userId> cp my_file gs://bucket/folder

它添加了元数据,但将大写 I 更改为一个小的 i

有什么办法让元数据保持大写吗?

我有一个函数依赖于查找元数据为userId,否则它返回null,我目前的解决方法是检查userIduserid。但是继续前进很高兴知道仅以小写字母设置元数据键是否更好。 这在从存储桶复制到存储桶时非常不方便,因为它会添加额外的自定义元数据而不是替换适当的元数据。

【问题讨论】:

实际上我可以通过控制台添加custom key with an uppercase,但不使用该命令。我正在对此进行更多调查 @Chris32 我可以从 Android 应用程序中做到这一点,似乎 gsutil 可能有问题。在这里发布之前,我检查了他们的 GitHub,之前似乎有类似的问题#421,但它已在更新中修复。尽管在问题中 OP 使用的是setmeta. 是的,过去有一个更新解决了这个问题,但现在又出现了。暂时没有更新。作为一种解决方法,如果需要自定义键区分大小写,您可以使用控制台手动添加。 Gsutil 保持值区分大小写,因此只有自定义键才需要。 目前,我已经涵盖了,但我认为应该在 API 之间保持一致性。我花了一些时间来调试我的问题,因为除此之外我必须选择一个I 来大写:-D 【参考方案1】:

Google Cloud Storage 的 XML API uses HTTP headers 用于公开和设置自定义对象元数据。根据RFC 2616,HTTP 标头不区分大小写,因此虽然您可以使用其他 API 指定大小写,但我们通常不鼓励依赖它。

也就是说,我同意现有的 gsutil 行为可能是一个错误。

【讨论】:

【参考方案2】:

我不建议您在元数据(以及一般的标题)中使用大写字母。几个月前我收到了一封电子邮件,我在thread 中找到了一份副本

Google 将所有标题转换为小写。因此,今天养成对所有 API 调用使用小写标头的习惯。

【讨论】:

以上是关于将自定义元数据设置为 Google Cloud Storage 中的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义 Cloud Builders 与来自 Google Artifact Repository 的图像一起使用

是否可以将自定义元数据标签添加到音乐文件?

google-cloud-profiler 元数据服务器警告

使用冰山表格式将自定义元数据添加到 DataFrame 模式

在 Wordpress 中,如何将自定义帖子类型的默认管理员排序顺序设置为自定义列?

Google Cloud Run(完全托管):无法自定义域映射