2013-10-02 98 views
12

我已经拥有一个数据库,其中包含以前通过标准Google App Engine create_upload_url()过程上传的BlobKeys,并且每个上传都通过相同的Google云端存储分区设置gs_bucket_name参数。将App Engine Blobkey解码为Google云端存储文件名

我想要做的是能够解码现有的blobkeys,以便我可以获得他们的Google云存储文件名。据我所知,我可以一直使用gs_object_name酒店需要从FileInfo class,除了:

必须保存在您的上传处理程序或 这个数据将丢失gs_object_name自己。 (在GCS对象的其他元数据自动存储在 GCS,所以你并不需要保存在你的上传处理程序。

含义gs_object_name属性仅在上传处理程序可用,如果我没有在那个时候被保存它,然后它的丢失。

此外,create_gs_key()不会做的伎俩,因为它,而不是需要一个谷歌存储文件名和创建的BlobKey。

所以,我怎么能采取之前通过应用引擎上传到Google云端存储分区的blobkey,并获取它的Google C大声存储文件名? (python)

+0

据我所知,您只能重写blob,即意味着逐字节地读取它并将其重新写入到云存储中,类似于重命名cloudstorage文件,但这次保存的是cloudstorage路径而不是blobkey。保存云存储对象的BlobKeys似乎处于“monkeypatch”状态。 HTTP://计算器。com/questions/18697418/programmatically-emulating-gsutil -mv-on-appengine -pragment-in-python – cat

回答

6

只能在上传处理程序(fileInfo.gs_object_name)得到云端储存的文件名,并存储在数据库中。之后,它就会丢失,并且似乎不会保留在BlobInfo或其他元数据结构中。

谷歌说:不像BlobInfo元数据FileInfo元数据不是 坚持数据存储。 (也没有blob密钥,但如果需要,可以通过调用create_gs_key来创建一个密钥)。您必须自己将gs_object_name保存在您的上传处理程序中,否则此数据将丢失 。

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

更新:我能为SDK-的BlobKey在Blob存储,浏览器解码: “encoded_gs_file:base64编码的文件名,在这里”。然而,真实的东西不是base64编码的。

create_gs_key(filename,rpc = None)... Google说:“以字符串形式返回加密的blob密钥。”有没有人猜测为什么这是加密的?

+0

可能是加密的,因为它包含访问令牌。 –

相关问题