2015-01-27 2 views
0

Я хочу хранить файлы и изображения, которые я получаю из api в blobstore (а точнее, чтобы они были доступны из apb blobstore). Поскольку файл-api устарел, как мне это сделать?Хранение изображений с сервера в GAE blobstore?

+0

[Что вы пробовали до сих пор?] (Http://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users) - вы пробовали спросить любой официальный канал поддержки GAE? –

+0

У меня такая же тема, из многих предложений рекомендуется использовать GCS для хранения изображений, а не Datastore или Blobstore. – hyip

ответ

1

Один из способов - сохранить изображения в облачном хранилище (gcs) и получить к ним доступ через blogstore api. В основном вы вызываете gcs.open() и пишите файл. Затем, когда вам нужно использовать blobstore api, вы вызываете blobkey = blobstore.create_gs_key(). С этим вы можете делать такие вещи, как использование изображений api с вызовами, такими как images.get_serving_url(blobkey, secure_url=False).

Как вы это делаете, это зависит от ваших конкретных целей. Я использую, чтобы показывать изображения в галерее, которую я загружаю. Для этого у меня есть загрузка файла в форме 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] 

Затем сохраните файл с данными ГКС:

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) 

Теперь я могу получить доступ с помощью API ГКС с вызовами, такими как:

gcs.delete(gcs_filename) 

Или использовать API Blobstore, получая ранее упомянутый Блочный:

blobkey = blobstore.create_gs_key() 
Смежные вопросы