Hi All, I have been trying to understand how to upload and download images from to a Blobstore and have hit a wall. I have essentially made a modified version of the Guestbook example provided by google and modified it to suit my needs, I have tested the guestbook app as is and got it working, somehow somewhere I am making a simple mistake that frustrate every attempt at getting it working in my own code. I have stripped down my code to the essential in the hope of understanding what is wrong, but I am still stuck.
What am I attempting to do ? Upload in a blobstore an image and display it in a web page. What is my code ? 1) My upload form served from a static page ... <form action="http://192.168.0.196:8083/uploadphoto" enctype="multipart/form-data" method="post"> <div><label>Attempt at uploading a picture using a form</label></ deiv> <div><input type="file" name="photo" /></div> <div><input type="submit" value="Upload Photo" /></div> </form> ... 2) My db model : class Photo(db.Model): photo = db.BlobProperty() date = db.DateTimeProperty(auto_now_add=True) 3) The code uploading the photo and saving it in the blobstore class UploadPhoto(webapp.RequestHandler): def post(self): photo = Photo() img = self.request.get('photo') photo.photo = db.Blob(img) photo.put() 4) The code creating the web page displaying the images : class PhotoPage(webapp.RequestHandler): def get(self): self.response.out.write('<html><pre>') self.response.out.write('<h1>Date&Time Photo</h1>') photos = db.GqlQuery("SELECT * FROM Photo ORDER BY date DESC LIMIT 10") for photo in photos: self.response.out.write('<p>%s ' % photo.date) self.response.out.write('<img src="servephoto?photo_id=%s" /></p>' % photo.key()) self.response.out.write('</pre></body></html>') 5) The code serving the images : class ServePhoto (webapp.RequestHandler): def get(self): photo = db.get(self.request.get("photo_id")) if photo.photo: self.response.headers['Content-Type'] = "image/jpg" self.response.out.write(photo.photo) else: self.error(404) Everything seem to work until this last stage, I can select an image in my form, upload it, Something is written in Binary in the Blobstore. When I visit the page supposed to display the image I see all info but a broken image icon. I checked the source code and the HTML seem to be just fine, here it is with one record in the blobstore, I get the blob key which mena that there is a record with some binary stuff in it. <html><pre><h1>Date&Time Photo</h1><p>2010-09-13 00:31:14.477698 <img src="servephoto?photo_id=agt0ZXN0cmF5c3Bvc3ILCxIFUGhvdG8YWww" /></p></ pre></body></html> I also know that the ServePhoto class is called and executed but it if photo.photo always return false and execute self-eror(404). I tried replacing this with a different error code and it always display the error code so I am sure the if statement get a false. My questions is, why would the if statement get a false if there is effectively an image in the blobstore (Proved by the fact that I can retrieve it's key) ? I am sorry for the long post, and hope I am not too confusing. Thanks for any hint that would get me on the right way and forgive me if the answer is obvious, I probably need new eyes. Raymond -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
