這是我從blobst處理圖像做礦石。
1處理器,以提供圖片:
class AvatarDownloadHandler(BaseHandler):
"""
Handler for Serve User's Avatar
"""
def get(self):
params = {}
if self.request.get('id') != '':
logging.info('loading image from id: %s' % self.request.get('id'))
user_info = self.user_model.get_by_id(long(self.request.get('id')))
if user_info != None:
if user_info.picture:
self.response.headers['Content-Type'] = 'image/png'
self.response.out.write(user_info.picture)
else:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('No image')
else:
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('No image ID')
有了這個處理程序,然後在金賈/ HTML端只需要調用路由URL下載處理程序與ID參數,即:
指定路線:
RedirectRoute('/img/', handlers.AvatarDownloadHandler, name='img-download', strict_slash=True),
JINJA/HTML使用:
<img src="/img/?id=5671617594130432">
1處理器上傳圖片:
class AvatarUploadHandler(BaseHandler):
"""
Handler for Edit User's Avatar
"""
@user_required
def post(self):
""" Handles upload"""
params = {}
if not self.user:
return self.render_template('home.html', **params)
if not self.form.validate():
message = _(messages.saving_error)
self.add_message(message, 'danger')
return self.redirect_to('edit-profile')
picture = self.request.get('picture')
user_info = self.user_model.get_by_id(long(self.user_id))
if user_info != None:
# Transform the image
avatar = images.resize(picture, width=200, height=200, crop_to_fit=True, quality=100)
user_info.picture = avatar
user_info.put()
message = _(messages.saving_success)
self.add_message(message, 'success')
self.redirect_to('edit-profile')
message = _(messages.saving_error)
self.add_message(message, 'danger')
return self.redirect_to('edit-profile')
@webapp2.cached_property
def form(self):
f = forms.AvatarForm(self)
return f
使用get_serving_url創建一次從你的blob_key服務網址。這個服務網址可以在你的img標籤的src中使用。 Google文檔:https://cloud.google.com/appengine/docs/python/images/functions – voscausa
非常感謝您,但我不太瞭解(甚至是從Google文檔中)如何正確使用它。!如果你能詳細闡述它,那將是非常好的。:) – Niraj
你應該把你的視圖中的代碼添加到你的問題中,然後將圖像發送到模板。 – doru