【问题标题】:Decode an App Engine Blobkey to a Google Cloud Storage Filename将 App Engine Blobkey 解码为 Google Cloud Storage 文件名
【发布时间】:2013-10-08 10:26:24
【问题描述】:

我有一个完整的数据库,其中包含以前通过标准 Google App Engine create_upload_url() 流程上传的 BlobKey,并且通过设置 gs_bucket_name 参数,每个上传都进入了同一个 Google Cloud Storage 存储桶。

我想做的是能够解码现有的 blobkey,以便获取它们的 Google Cloud Storage 文件名。我了解我可以一直在使用来自FileInfo classgs_object_name 属性,除了:

您必须自己将 gs_object_name 保存在您的上传处理程序中,或者 此数据将丢失。 (GCS 中对象的其他元数据存储在 自动在 GCS 中,因此您无需将其保存在上传处理程序中。

意思是gs_object_name 属性仅在上传处理程序中可用,如果我当时没有保存它,那么它就丢失了。

另外,create_gs_key() 并没有做到这一点,因为它取而代之的是一个 google 存储文件名并创建了一个 blobkey。

那么,如何获取之前通过应用引擎上传到 Google Cloud Storage 存储桶的 blobkey,并获取它的 Google Cloud Storage 文件名? (蟒蛇)

【问题讨论】:

  • 据我所知,您只能重写 blob,这意味着逐字节读取它并再次将其写入云存储,类似于重命名云存储文件,但这次保存的是云存储路径而不是 blobkey .保存云存储对象的 BlobKeys 似乎处于“monkeypatch”状态。 stackoverflow.com/questions/18697418/…

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


【解决方案1】:

您只能在上传处理程序 (fileInfo.gs_object_name) 中获取云存储文件名并将其存储在您的数据库中。之后它就丢失了,并且似乎没有保存在 BlobInfo 或其他元数据结构中。

Google 说:不像 BlobInfo 元数据 FileInfo 元数据不是 持久化到数据存储区。 (也没有 blob 键,但你可以 如果需要,稍后通过调用 create_gs_key 创建一个。)您必须保存 上传处理程序中的 gs_object_name 或此数据将 迷路了。

https://developers.google.com/appengine/docs/python/blobstore/fileinfoclass

更新:我能够在 Blobstore-Viewer 中解码 SDK-BlobKey:“encoded_gs_file:base64-encoded-filename-here”。然而真正的东西不是base64编码的。

create_gs_key(filename, rpc=None) ... Google 说:“将加密的 blob 密钥作为字符串返回。”有谁知道为什么这是加密的?

【讨论】:

  • 可能已加密,因为它包含访问令牌。
【解决方案2】:

从文档中的声明来看,生成的 GCS 文件名似乎丢失了。您必须使用 gsutil 手动浏览您的存储桶。

https://developers.google.com/storage/docs/gsutil/commands/ls

【讨论】:

    【解决方案3】:

    如果你有 blobKeys,你可以使用:ImagesServiceFactory.makeImageFromBlob

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 2015-07-07
      • 2012-01-02
      • 2020-04-04
      • 2014-11-22
      • 2013-03-20
      • 2018-07-22
      • 1970-01-01
      • 2013-01-26
      相关资源
      最近更新 更多