在GAE blobstore中存储来自服务器的图像?

时间:2015-01-27 13:42:05

标签: python google-app-engine blobstore

我想存储我从blobstore中的api获取的文件和图像(或者更确切地说,它们可以从blobstore api访问)。由于不推荐使用file-api,我该怎么做?

1 个答案:

答案 0 :(得分:1)

一种方法是将图像存储在云存储(gcs)中,并通过blogstore api访问它们。基本上你调用gcs.open()并写入文件。然后,当您需要使用blobstore api时,请调用blobkey = blobstore.create_gs_key()。通过这种方式,您可以执行诸如使用images.get_serving_url(blobkey, secure_url=False)之类的调用来使用图像api。

你如何做到这一点取决于你的具体目标是什么。我用来在我上传的图库中提供图像。为此,我在前端的html表单上上传文件,该文件发送文件。在后端我这样做(这些只是广泛的笔触):

#  inside the webapp2.RequestHandler get method:
import mimetypes
file_data = self.request.get("photoUpload", default_value = None)
filename = self.request.POST["photoUpload"].filename
folder = "someFolderName"
content_type = mimetypes.guess_type(self.filename)[0]

然后将文件数据保存到GCS:

from google.appengine.api import app_identity
import cloudstorage as gcs

# gcs_filename must be unique so I'm using bucket/folder/file
# it would be smart to check uniqueness before proceeding
gcs_filename = '/%s%s/%s' % (bucket or app_identity.get_default_gcs_bucket_name(), folder, filename)
gcs.open(gcs_filename, 'w', content_type=content_type or b'binary/octet-stream', options={b'x-goog-acl': b'public-read'}) as f:
            f.write(file_data)

现在我可以通过以下调用使用GCS api进行访问:

gcs.delete(gcs_filename)

或者通过获取前面提到的块来使用Blobstore API:

blobkey = blobstore.create_gs_key()