将App Engine Blobkey解码为Google云存储文件名

时间:2013-10-02 04:44:12

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

我有一个以前通过标准Google App Engine create_upload_url()流程上传的BlobKeys数据库,并且通过设置gs_bucket_name将每个上传内容转到同一个Google云端存储分区参数。

我想要做的是能够解码现有的blobkey,以便获得他们的Google云端存储文件名。我了解 可以 使用gs_object_name中的FileInfo class属性,但以下情况除外:

  

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

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

此外,create_gs_key()无法解决问题,因为它会使用google存储文件名并创建一个blobkey。

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

3 个答案:

答案 0 :(得分:6)

您只能在上传处理程序(fileInfo.gs_object_name)中获取cloudstorage文件名并将其存储在数据库中。之后它就会丢失,似乎不会在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密钥作为字符串返回。”有没有人猜到为什么这是加密的?

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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