使用blobstore.create_gs_key创建的BlobKey中的BlobInfo对象

gae*_*123 4 python google-app-engine blobstore google-cloud-storage

我正在将代码从不赞成使用的文件api转换掉。

我有以下代码在SDK服务器上工作正常,但在生产中失败。我在做什么甚至正确吗?如果是,那可能是什么问题,有什么办法解决它吗?

# Code earlier writes the file bs_file_name. This works fine because I can see the file
# in the Cloud Console.
bk = blobstore.create_gs_key( "/gs" + bs_file_name)
assert(bk)
if not isinstance(bk,blobstore.BlobKey):
    bk = blobstore.BlobKey(bk)
assert isinstance(bk,blobstore.BlobKey)
# next line fails here in production only
assert(blobstore.get(bk))  # <----------- blobstore.get(bk) returns None 
Run Code Online (Sandbox Code Playgroud)

Mit*_*ミッチ 6

不幸的是,根据文档,您无法获得GCS文件的BlobInfo对象。

https://developers.google.com/appengine/docs/python/blobstore/#Python_Using_the_Blobstore_API_with_Google_Cloud_Storage

注意:一旦获得GCS对象的blobKey,就可以将其传递,序列化,或者在可以将blobKey用于存储在Blobstore中的对象的任何地方互换使用。这允许在应用程序将一些数据存储在blobstore中并将某些数据存储在GCS中的情况下使用,而其他应用程序则对数据进行相同的处理。(但是,BlobInfo对象当前不适用于GCS对象。)

  • 是的,我也被抓住了。对此可能有一点例外值得一提。如果您使用BlobStore API将文件上传到GCS存储桶,则会获得一个BlobKey,可以使用它来获取BlobInfo。这是因为BlobStore API创建了BlobInfo。在这种情况下,我同时存储了原始的BlobKey和GCS对象名称,因此可以获得BlobInfo。值得注意的是,此BlobKey与您从create_gs_key()获得的BlobKey不同。 (3认同)