如何根据 blobkey 从 Google Cloud Storage 中读取数据?

How to read data from Google Cloud Storage based on its blobkey?

早期我使用文件 API 将数据保存到 blobstore,然后使用以下代码读取它:

resource = blob_key
blob_info = blobstore.BlobInfo.get(resource)
if blob_info:
    self.send_blob(blob_info)
else:
    self.response.write('Blob entry not found')

文档说在很多情况下我可以继续使用 blobstore API 来使用 Google Cloud Storage。但是上面的代码returnsblob_info等于None

根据 the documentation,我应该直接从 blobstore 读取数据,但以下代码也不适用于 GCS (Blob entry not found),但适用于 blobstore 文件:

class BlobstoreServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self, resource):
    resource = str(urllib.unquote(resource))
    blob_info = blobstore.BlobInfo.get(resource)
    if blob_info: # blobstore files
        self.send_blob(blob_info)
    elif blobstore.get(resource): # Google Cloud Storage files
        self.send_blob(resource)
    else:
        self.response.write('Blob entry not found')

如何写入 Google 云存储?使用时不创建 BlobInfo appengine gcs client. For such files you can still create a blob key using blobstore.create_gs_key 但这些键没有关联的 BlobInfo。

使用 Blobstore 下载 blobfiles 和 GCS 文件的示例代码

您已将文件名和 blobkey 保存在 db.Model YourFiles 实体中:

your_file = YourFiles.get_by_key_name(key_name)
# blob_ref is a blobstore.BlobReferenceProperty()
download_url = '/blob_serve/%s?save_as=%s' % (your_file.blob_ref.key(), your_file.file_name)
self.redirect(download_url)   # download using the handler below


class BlobServe(blobstore_handlers.BlobstoreDownloadHandler):          

    def get(self, resource):
        """ use blob_key to download GCS and blobstore blobs """

        blob_key = str(urllib.unquote(resource))
        save_as = self.request.get('save_as')
        self.send_blob(blob_key, save_as=save_as)