如何根据 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)
早期我使用文件 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)