0

GAEを使用して画像を動的に提供することに関するGoogleの手順は、次のとおりです。https ://developers.google.com/appengine/articles/python/serving_dynamic_images 唯一の問題は、このメソッドがAJAXを使用しないことであり、私が期待するのと同じくらい効率的です。

AJAXをGAEPython2.7で使用して複数の画像を動的に提供しようとしていますが、現在は1つの画像を提供することに重点を置いています。

Pythonサーバーサイドコード:

class GetImage(webapp2.RequestHandler):
    def get(self):
        problem = Problem.all()[0]
        if(problem and problem.prompt_image):
            self.response.headers['Content-Type'] = "image/png"
            self.response.out.write(problem.prompt_image)

クライアント側のAJAXコード:

$.ajax({
    url: "/img",
    type: "POST",
    dataType: "html",
    success: function(msg){
        $("#right").append("<img>"+msg+"</img>");
    }
});

私が直面している問題は、AJAXを介してDOMにblobstoreのコンテンツを提供する方法がわからないことです。誰かが私を正しい方向に向けることができますか?

ありがとう!

編集:voscausaの解決策は正しい方向に進んでいるようです。ただし、blob_keyが必要です。私のモデルは次のとおりです。

class Problem(db.Model):
    prompt_image = db.BlobProperty()

db.BlobPropertyからBlobキーを取得する方法がわからないようです。これは可能ですか?

4

2 に答える 2

1

この問題は本当に頭を悩ませました。みんな、特に解決策を得るために私を正しい道に導いてくれた voscausa に感謝します。そこには多くの古い資料があります。これは私が使用したソリューションです: https://developers.google.com/appengine/docs/python/blobstore/overview#Uploading_a_Blob (完全なサンプル アプリケーションを参照)

import os
import urllib
import webapp2

from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers

class MainHandler(webapp2.RequestHandler):
  def get(self):
    upload_url = blobstore.create_upload_url('/upload')
    self.response.out.write('<html><body>')
    self.response.out.write('<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)
    self.response.out.write("""Upload File: <input type="file" name="file"><br> <input type="submit"
        name="submit" value="Submit"> </form></body></html>""")

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
  def post(self):
    upload_files = self.get_uploads('file')  # 'file' is file upload field in the form
    blob_info = upload_files[0]
    self.redirect('/serve/%s' % blob_info.key())

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self, resource):
    resource = str(urllib.unquote(resource))
    blob_info = blobstore.BlobInfo.get(resource)
    self.send_blob(blob_info)

app = webapp2.WSGIApplication([('/', MainHandler),
                               ('/upload', UploadHandler),
                               ('/serve/([^/]+)?', ServeHandler)],
                              debug=True)
于 2012-11-02T04:07:19.567 に答える
1

GET を使用してブロブストアから画像を提供するには:

http://{{ your_appid }}.appspot.com/imgserve/{{ blob_key }}

ブロブストアから画像を提供するコード:

class ImgServe(blobstore_handlers.BlobstoreDownloadHandler):

    def get(self, blob_key):                                       

    blob_info = blobstore.BlobInfo.get(blob_key)     
    self.send_blob(blob_info, save_as=True)


app = webapp2.WSGIApplication(
                          [
                           ('/imgserve/([^/]+)?', ImgServe),
                          ], debug=True)   
于 2012-10-29T01:45:20.970 に答える