将App Engine Blobkey解码为Google Cloud Storage文件名

12
我有一个数据库,里面存满了之前通过标准的Google App Engine create_upload_url()进程上传的BlobKeys,每次上传都通过设置gs_bucket_name参数将文件上传到同一个Google Cloud Storage存储桶。
我想做的是解码现有的blobkeys,以便获取它们的Google Cloud Storage文件名。我知道我可以使用FileInfo类gs_object_name属性,但是:

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

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

此外,create_gs_key()并不能解决问题,因为它实际上是获取Google Storage的文件名并创建一个blobkey。

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


据我所知,您只能重写Blob,这意味着逐字节读取并将其再次写入CloudStorage,类似于重命名CloudStorage文件,但这次保存CloudStorage路径而不是BlobKey。 BlobKeys保存CloudStorage对象似乎处于“monkeypatch”状态。 https://dev59.com/U3bZa4cB1Zd3GeqPH6GW - cat
3个回答

6
您只能在上传处理程序中获取云存储文件名(fileInfo.gs_object_name),并将其存储在数据库中。之后,它就会丢失,似乎没有被保留在BlobInfo或其他元数据结构中。
谷歌表示:与BlobInfo元数据不同,FileInfo元数据不会持久保存到数据存储中。(也没有blob key,但如果需要,您可以稍后调用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)...谷歌说:“返回一个加密的字符串作为Blob密钥。”有人猜测为什么要加密吗?

可能是加密的,因为它包含访问令牌。 - Jon Wayne Parrott

2

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接