我有一个以前通过标准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文件名? (蟒)
答案 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