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.

Reply via email to