Python 尝试从GAE动态服务图像,获得404
我的图像不是从数据存储中提供的,我在图像应该在的页面上得到了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
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: </label></div>
<div><textarea name="prop-name" rows="1" columns "100"></textarea></div>
<br><br>
<div><label>Property Address: </label></div>
<div><textarea name="address" rows="1" columns "100"></textarea></div>
<br><br>
<div><label>Property Type: </label></div>
<div><textarea name="prop-type" rows="1" columns "100"></textarea></div>
<br><br>
<div><label>Building Size: </label></div>
<div><textarea name="size" rows="1" columns "100"></textarea></div>
<br><br>
<div><label>Stories: </label></div>
<div><textarea name="stories" rows="1" columns "100"></textarea></div>
<br><br>
<div><label>Space Available: </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)