Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试从GAE动态服务图像,获得404_Python_Google App Engine - Fatal编程技术网

Python 尝试从GAE动态服务图像,获得404

Python 尝试从GAE动态服务图像,获得404,python,google-app-engine,Python,Google App Engine,我的图像不是从数据存储中提供的,我在图像应该在的页面上得到了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 imp

我的图像不是从数据存储中提供的,我在图像应该在的页面上得到了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()
导入cgi
导入日期时间
导入URL库
导入wsgiref.handlers
从google.appengine.ext导入数据库
从google.appengine.api导入图像
从google.appengine.api导入用户
从google.appengine.ext导入webapp
从google.appengine.ext.webapp.util导入运行\u wsgi\u应用程序
类PropUpload(db.Model):
property_name=db.StringProperty()
property\u address=db.StringProperty()
项目类型=db.StringProperty()
建筑尺寸=db.StringProperty()
stories=db.StringProperty()
可用空间=db.StringProperty()
per_leated=db.StringProperty()
prop_image=db.BlobProperty()
date=db.DateTimeProperty(自动\u现在\u添加=True)
类主页(webapp.RequestHandler):
def get(自我):
self.response.out.write(“”)
""")
display2=db.Query(PropUpload)
显示2.订单(“-日期”)
对于display2中的dis:
self.response.out.write(“”%dis.key())
self.response.out.write('Property Name:%s
'%dis.Property\u Name) self.response.out.write('地址:%s
'%dis.property\u地址) self.response.out.write('类型:%s ft2
'%dis.project\u类型) self.response.out.write('Stories:%s
'%dis.Stories) self.response.out.write(“”) 类映像(webapp.RequestHandler): def get(自我): img\u id=self.request.get(“img\u id”) dis=db.get(self.request.get(“img\u id”)) 如果是dis.prop_图像: self.response.headers['Content-Type']=“image/png” self.response.out.write(dis.prop_图像) 其他: self.response.out.write(“无图像”) 类UploadPage2(webapp.RequestHandler): def get(自我): self.response.out.write(“”) 属性名称: 

物业地址:

属性类型:

建筑面积:

故事:

可用空间:
租赁百分比:
图片: """) def post(自我): props=PropUpload() property\u name=self.request.get('prop-name') property\u address=self.request.get('address')) 属性类型=self.request.get('prop=type') building\u size=self.request.get('size')) stories=self.request.get('stories') 可用空间=self.request.get('space') prop_image=self.request.get('img')) per_leated=self.request.get('percent') props.property\u name=属性\u name props.property\u address=属性\u address props.property\u type=属性类型 道具。建筑尺寸=建筑尺寸 道具故事=故事 props.space\u available=可用空间 props.prop_image=db.Blob(prop_image) props.per_RELEATED=per_RELEATED 道具 self.redirect(“/upload2”) application=webapp.WSGIApplication([ (“/”,主页), ('/upload2',UploadPage2), ],debug=True) def main(): 运行应用程序(应用程序) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': main()
除了404之外,一切正常,我在谷歌上找不到任何东西


感谢您的帮助,如果我遗漏了任何内容,我将在中编辑任何内容。

假设您的上载工作正常,您需要为图像本身提供一个处理程序。现在您正在引用
,但是
img
似乎无法解析处理程序中的任何内容(另外,您不需要为
标记提供一个结束标记
,然后它应该在那里找到并返回您的图像。

您的
应用程序.yaml
看起来像什么?具体来说,您设置了什么来处理对
img
的请求?假设它看起来像
/img
,请尝试使用
img?img\id=%s
带有一个
/
。它是/images,但我的印象是这些图像是直接从数据存储中提供的?啊,完全正确的人,我在阅读时的间隔很差:)我将进行另一次(更近的)通读。
self.response.out.write(“”)出现在你的代码中,就像它在上面的代码中所做的那样?不,这里有一个普通的HTML代码,那就是,我只是想在PaGHAH上节省空间,它总是和我在一起的最后一步。你是最好的,谢谢!“凯文,不用担心,你已经完成了艰苦的工作:”祝你万事如意!
application = webapp.WSGIApplication([
    ('/', MainPage),
    ('/img', Image),
    ('/upload2', UploadPage2),
    ], debug=True)