12

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

我想做的是能够解码现有的 blobkey,这样我就可以获得他们的 Google Cloud Storage 文件名。我知道我本来可以使用FileInfo 类中的gs_object_name属性,但以下情况除外:

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

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

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

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

4

3 回答 3

6

您只能在上传处理程序 (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 密钥作为字符串返回。” 有谁知道为什么这是加密的?

于 2013-10-29T10:07:26.957 回答
2

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

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

于 2013-10-08T15:31:55.580 回答
0

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

于 2014-01-21T18:19:15.667 回答