1

画像がデータストアから提供されていません。画像があるべきページに404が表示されます。

コードは次のとおりです。

import cgi
import datetime
import urllib
import wsgiref.handlers

from google.appengine.ext import db
from google.appengine.api import images
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app


class PropUpload(db.Model):
  property_name = db.StringProperty()
  property_address = db.StringProperty()
  project_type = db.StringProperty()
  building_size = db.StringProperty()
  stories = db.StringProperty()
  space_available = db.StringProperty()
  per_leased = db.StringProperty()
  prop_image = db.BlobProperty()
  date = db.DateTimeProperty(auto_now_add=True)


class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.out.write("""<!DOCTYPE html>
            <html lang="en">
              <head>
      <somehtml>""")

    display2 = db.Query(PropUpload)
    display2.order("-date")
    for dis in display2:
        self.response.out.write('<div><img src="img?img_id=%s"></img>' % dis.key())
        self.response.out.write('<h4>Property Name: %s </h4><br>' % dis.property_name)
        self.response.out.write('<div style="border-bottom: 1px solid #CCC;">Address: %s </div><br>' % dis.property_address)
        self.response.out.write('<div style="border-bottom: 1px solid #CCC;">Type:  %s ft<sup>2</sup></div><br>' % dis.project_type)
        self.response.out.write('<div style="border-bottom: 1px solid #CCC;">Stories:  %s </div><br>' % dis.stories)

    self.response.out.write("<more html>")


class Image(webapp.RequestHandler):
  def get(self):
    img_id = self.request.get("img_id")
    dis = db.get(self.request.get("img_id"))
    if dis.prop_image:
      self.response.headers['Content-Type'] = "image/png"
      self.response.out.write(dis.prop_image)
    else:
      self.response.out.write("no image")


class UploadPage2(webapp.RequestHandler):
  def get(self):
    self.response.out.write("""<!DOCTYPE html>
    <form action="/upload2" enctype="multipart/form-data" method="post">
                        <div><label>Property Name:&nbsp</label></div>
                        <div><textarea name="prop-name" rows="1" columns "100"></textarea></div>
                        <br><br>
                        <div><label>Property Address:&nbsp</label></div>
                        <div><textarea name="address" rows="1" columns "100"></textarea></div>
                        <br><br>
                        <div><label>Property Type:&nbsp</label></div>
                        <div><textarea name="prop-type" rows="1" columns "100"></textarea></div>
                        <br><br>
                        <div><label>Building Size:&nbsp</label></div>
                        <div><textarea name="size" rows="1" columns "100"></textarea></div>
                        <br><br>
                        <div><label>Stories:&nbsp</label></div>
                        <div><textarea name="stories" rows="1" columns "100"></textarea></div>
                        <br><br>
                        <div><label>Space Available:&nbsp</label></div>
                        <div><textarea name="title" rows="2" columns "100"></textarea></div>
                        <br>
                        <div><label>Percent Leased:</label></div><span>
                        <div><textarea name="percent" rows="3" cols="100"></textarea></div><br>
                        <div><label>Picture:</label></div>
                        <div><input type="file" name="img"/></div>
                        <div><label></label></div><span>
                        <div><input type="submit" value="Upload" /></div>
                      </form>""")


  def post(self):
    props = PropUpload()
    property_name = self.request.get('prop-name')
    property_address = self.request.get('address')
    property_type = self.request.get('prop=type')
    building_size = self.request.get('size')
    stories = self.request.get('stories')
    space_available = self.request.get('space')
    prop_image = self.request.get('img')
    per_leased = self.request.get('percent')
    props.property_name = property_name
    props.property_address = property_address
    props.property_type = property_type
    props.building_size = building_size
    props.stories = stories
    props.space_available = space_available
    props.prop_image = db.Blob(prop_image)
    props.per_leased = per_leased
    props.put()
    self.redirect('/upload2')


application = webapp.WSGIApplication([
    ('/', MainPage),
    ('/upload2', UploadPage2),
    ], debug=True)


def main():
  run_wsgi_app(application)

if __name__ == '__main__':
  main()

404を除いて、すべてが正常に機能し、問題をグーグルで検索するものは何も見つかりません。

助けてくれてありがとう、そして私が何かを省略した場合は申し訳ありませんが、私はで何かを編集します。

4

1 に答える 1

2

アップロードが適切に機能すると仮定すると、画像自体のハンドラーを提供する必要があります。現在、参照していますが<img src="img?img_id=%s">imgハンドラー内の何にも解決されていないようです(また、HTML</img>の属性に終了タグを指定する必要はありません)。<img>あなたがしたいのは、画像ベースのリクエストのハンドラーを設定し、応答を画像自体にすることです。その目的のように見えるものをすでにImage設定しました(no image結果のタイプが一貫するように、パーツを実際の画像に置き換える必要があることに注意してください)。

ハンドラーをURLにマップするにはImage、ハンドラーを次のように変更してみてください。

application = webapp.WSGIApplication([
    ('/', MainPage),
    ('/img', Image),
    ('/upload2', UploadPage2),
    ], debug=True)

これにより/img、リクエストがImageハンドラーにルーティングされます(srcタグをに変更して<img src="/img?img_id=%s">、画像を見つけて返す必要がある場合もあります。

于 2012-12-18T21:49:18.790 に答える