2011-09-25 63 views
1

我阅读了教程和所有可以找到的关于显示保存在数据存储中的图像的源代码,但仍无法使其工作。我感谢任何帮助。 This is my previous question如何在GAE数据存储中显示图像?

下面的代码为/displayimage显示图像的链接断开;并为/image它给BadKeyError: Invalid string key .根据Nick Johnson reply here我必须传递一个空字符串img_id但logging.info在/display image显示此密钥:(((result.key():)))) agpkZXZ-dGluZy0xcg8LEghIb21lUGFnZRjOCAw。谢谢你的帮助。

class HomePage(db.Model): 
    thumbnail = db.BlobProperty() 
    firm_name = db.StringProperty() 

class ImageUpload(webapp.RequestHandler): 
    def get(self): 
...   
     self.response.out.write(""" 
     <form action="/imagesave" enctype="multipart/form-data" method="post"> 
     <div><label>firm name:</label> <input type="text" name="firm_name" size=40></div> 
     <div><input type="file" name="img" /></div> 
     <div><input type="submit" value="Upload image"></div> 
     </form> 
     """) 

class ImageSave(webapp.RequestHandler): 
    def post(self): 
     homepage = HomePage() 
     thumbnail = self.request.get("img") 
     firm_name = self.request.get("firm_name") 
     homepage.thumbnail = db.Blob(thumbnail) 
     homepage.firm_name = firm_name 
     homepage.put() 

     self.redirect("/imageupload") 

class ImageResize(webapp.RequestHandler): 
    def post(self): 
     q = HomepageImage.all() 
     q.filter("firm_name", "mta") 
     qTable = q.get() 

     if qTable: 
      qTable.thumbnail = db.Blob(images.resize(self.request.get("img"), 32, 32)) 
      db.put(qTable) 
     else: 
      self.response.out.write("""firm not found""") 
     self.redirect("/imageupload") 

class DisplayImage(webapp.RequestHandler): 
    def get(self): 
... 
     query = HomePage.all() 
     query.filter("firm_name", "mta") 
     result = query.get() 

     self.response.out.write("""firm name: %s""" % result.firm_name) 

     #self.response.out.write("""<img src="img?img_id=%s"></img>""" % 
     #chenged this line as systempuntoout's comment to: 
     self.response.out.write("""<img src="/image?img_id=%s"></img>""" % 
     result.key()) 
     #but I still get the same error 
class Image(webapp.RequestHandler): 
    def get(self): 
... 
    #I am adding the next line to show that "img_id" is an empty string. 
    #why "img_id" empty here? 

    img_id = self.request.get("img_id") 
    logging.info("""**************************img_id: %s**************************""" % img_id) 
    #**************************img_id: ************************** 

     homepage = db.get(self.request.get("img_id")) 

     if homepage.thumbnail: 
      self.response.headers['Content-Type'] = "image/jpg" 
      self.response.out.write(homepage.thumbnail) 
     else: 
      self.response.out.write("no image") 


application = webapp.WSGIApplication(
[ 
("/imageresize",ImageResize), 
("/imageupload", ImageUpload), 
("/displayimage", DisplayImage), 
("/imagesave", ImageSave), 
("/image", Image), 
],          
debug=True 
) 

def main(): 
    run_wsgi_app(application) 
if __name__ == "__main__": 
    main() 

回答

1

您正在将图像源指向未定义的错误img路由。
正确的链接应指向/image这样的:

<img src="/image?img_id=%s"></img> 

我测试你的代码我校正和它工作得很好:

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


class HomePage(db.Model): 
    thumbnail = db.BlobProperty() 
    firm_name = db.StringProperty() 

class ImageUpload(webapp.RequestHandler): 
    def get(self): 
     self.response.out.write(""" 
     <form action="/imagesave" enctype="multipart/form-data" method="post"> 
     <div><label>firm name:</label> <input type="text" name="firm_name" size=40></div> 
     <div><input type="file" name="img" /></div> 
     <div><input type="submit" value="Upload image"></div> 
     </form> 
     """) 

class ImageSave(webapp.RequestHandler): 
    def post(self): 
     homepage = HomePage() 
     thumbnail = self.request.get("img") 
     firm_name = self.request.get("firm_name") 
     homepage.thumbnail = db.Blob(thumbnail) 
     homepage.firm_name = firm_name 
     homepage.put() 
     self.redirect("/imageupload") 

class ImageResize(webapp.RequestHandler): 
    def post(self): 
     q = HomepageImage.all() 
     q.filter("firm_name", "mta") 
     qTable = q.get() 
     if qTable: 
      qTable.thumbnail = db.Blob(images.resize(self.request.get("img"), 32, 32)) 
      db.put(qTable) 
     else: 
      self.response.out.write("""firm not found""") 
     self.redirect("/imageupload") 

class DisplayImage(webapp.RequestHandler): 
    def get(self): 
     query = HomePage.all() 
     query.filter("firm_name", "mta") 
     result = query.get() 
     self.response.out.write("""firm name: %s""" % result.firm_name) 
     self.response.out.write("""<img src="/image?img_id=%s"></img>""" % 
     result.key()) 

class Image(webapp.RequestHandler): 
    def get(self): 
     img_id = self.request.get("img_id") 
     logging.info("""**************************img_id: %s**************************""" % img_id) 
     homepage = db.get(self.request.get("img_id")) 
     if homepage.thumbnail: 
       self.response.headers['Content-Type'] = "image/jpg" 
       self.response.out.write(homepage.thumbnail) 
     else: 
       self.response.out.write("no image") 


application = webapp.WSGIApplication(
[ 
("/imageresize",ImageResize), 
("/imageupload", ImageUpload), 
("/displayimage", DisplayImage), 
("/imagesave", ImageSave), 
("/image", Image), 
],          
debug=True 
) 

def main(): 
    run_wsgi_app(application) 
if __name__ == "__main__": 
    main() 
+0

谢谢,我所做的改变,但我仍然得到同样的错误和破碎的图像链接。我通过更改更新了问题。出于某种原因,Image中的“img_id”是一个空字符串。 – Zeynel

+1

适合我;清除数据存储区,上传正确的图像并给它一个镜头。 – systempuntoout

+1

非常感谢。现在它可以工作。这是很大的帮助,再次感谢。 – Zeynel

相关问题