2010-12-04 51 views
1

UPDATE:如何將圖像寫入數據存儲?

systempuntoout看到評論。表單遺漏了提交按鈕。現在一切正常。


我有這樣的代碼,我認爲會寫入一個圖像數據存儲;但是,這不是happenning:

class AvatarSave(webapp.RequestHandler): 
    def post(self): 
     q = User.all() 
     q.filter("userEmail =", "[email protected]") 
     qTable = q.fetch(10) 
     if qTable: 
      for row in qTable: 
       avatar = images.resize(self.request.get("img"), 32, 32) 
       row.avatar = db.Blob(avatar) 
       db.put(qTable) 
     else: 
      self.response.out.write("user not found") 

     self.redirect('/') 

日誌顯示圖像鍵:

INFO  2010-12-04 13:56:26,601 dev_appserver.py:3317] "GET /img? 
img_id=ag1oZWxsby0xLXdvcmxkcgsLEgRVc2VyGIABDA HTTP/1.1" 200 - 

但顯示除了斷開的鏈接什麼。我在這裏錯過了什麼?我很感謝你的幫助。我在下面包含了整個腳本。謝謝!

class MainPage(webapp.RequestHandler): 
    def get(self): 
     siteUser = users.get_current_user() 
     greeting = None   
     if siteUser: 
      greeting = ("Welcome, %s! (<a href=\"%s\">sign out</a>)" % 
        (siteUser.nickname(), users.create_logout_url("/"))) 
     else: 
      greeting = ("<a href=\"%s\">Sign in or register</a>" % 
        users.create_login_url("/")) 

     self.response.out.write(greeting)    

     self.response.out.write(""" 
      <form action="/avatar-save" enctype="multipart/form-data" method="post">     
      <div><label>Avatar:</label></div> 
      <div><input type="file" name="img"/></div> 
      </form> 
     </body> 
     </html>""") 

     query = User.all() 
     query.filter("userEmail =", "[email protected]") 
     query.order("-userScore") 
     results = query.fetch(10) 
     self.response.out.write("""<html><head><style> 
           body {font-size: small; 
            font-family: Verdana, Helvetica, sans-serif; 
            }</style> 
            </head><body><ol>""") 
     for result in results: 
      self.response.out.write("<li>") 
      self.response.out.write("<b>%s</b> %s " % (result.userName, result.userLatestComment)) 
      self.response.out.write("<div><img src='img?img_id=%s'></img>" % result.key()) 
      self.response.out.write("</li>") 
     self.response.out.write("</ol></body></html>") 

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

class AvatarSave(webapp.RequestHandler): 
    def post(self): 
     q = User.all() 
     q.filter("userEmail =", "[email protected]") 
     qTable = q.fetch(10) 
     if qTable: 
      for row in qTable: 
       avatar = images.resize(self.request.get("img"), 32, 32) 
       row.avatar = db.Blob(avatar) 
       db.put(qTable) 
     else: 
      self.response.out.write("user not found") 

     self.redirect('/') 

application = webapp.WSGIApplication(
            [('/', MainPage), 
             ('/img', Image), 
             ('/avatar-save', AvatarSave),          
             ], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

回答

3

我覺得你的代碼缺少提交關於圖像格式提交按鈕:

self.response.out.write(""" 
      <form action="/avatar-save" enctype="multipart/form-data" method="post">     
      <div><label>Avatar:</label></div> 
      <div><input type="file" name="img"/></div> 
      <input type="submit"/> 
      </form>... 

我已經試過你的代碼推斷,你有沒有在這個問題報道的User型號:

class User(db.Model): 
    userEmail = db.EmailProperty() 
    userScore = db.IntegerProperty() 
    avatar = db.BlobProperty() 

因爲您的代碼不包含創建用戶的部分,所以我從Development交互式控制檯創建了一個用戶:

from main import User 
User(userEmail='[email protected]', userScore=1).put() 

然後,我已使用[email protected]登錄,並且我已上傳圖片。

這是結果:
alt text

我可以說的是「它的工作原理在我的機器」。

+3

你好systempuntoout:感謝您花時間幫忙!我真的很感激。現在它也適用於我的機器! – Zeynel 2010-12-04 16:05:19

相關問題