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