2013-10-02 135 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

可能是加密的,因爲它包含訪問令牌。 –

相關問題