I glanced over your code, nothing really major jumped out at me.  If
you are not getting an exception in ServePhoto then the model is
clearly getting created and successfully fetched.

So, here are my first thoughts:
Have you tried logging some debug info in the UploadPhoto and
ServePhoto handlers?    Specifically are you sure data is actually in
the photo property and it is not just an empty string or something?
Maybe you could try logging len(photo.photo) right before saving it,
then again right after fetching it.

What happens when you remove the if and simply return photo.photo?


Robert




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)


------
Robert Kluin
Ezox Systems, LLC







On Sun, Sep 12, 2010 at 22:03, Raymond
<[email protected]> wrote:
> 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.
>
>

-- 
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