将自定义元数据设置为 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
,我目前的解决方法是检查userId
和userid
。但是继续前进很高兴知道仅以小写字母设置元数据键是否更好。
这在从存储桶复制到存储桶时非常不方便,因为它会添加额外的自定义元数据而不是替换适当的元数据。
【问题讨论】:
实际上我可以通过控制台添加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 模式