Dear Both, Thanks a lot for your time. I have been away for a couple of weeks and did not have the time to follow up until today. I'll have a serious look at your info and will let you know if I manage to crack this nut.
Thanks again -R On Sep 15, 2:29 am, John McLaughlin <johnmclaugh...@massanimation.com> wrote: > @Robert. Right you are. I checked the docs and db.get is a magic get > anything function. Sorry for the noise. > > So I'm going for door #2 now. In ServePhoto "photo" must be the > correctly returned key. Otherwise accessing "photo.photo" would give > an error. So photo.photo must truly be a false value. This means to > me that although "photo" is a valid object, the photo.photo property > never got set properly. This takes us back to "UploadPhoto". It's > unlikely that photo.put() failed. And it's likely that "db.Blob" > created a valid db.Blob object. However accessing "photo.photo" > doesn't return the db.Blob object, but rather the underlying data that > came into it. Therefore I think your original hunch that the incoming > data for db.Blob is an empty string is correct. I've struggled with > multi-part posts so I'm not 100% sure about the html. One thing that > looks suspicious is the hard coding of the hostname:port in the post > action. Are you sure you don't want simply "/uploadphoto"? That > could send the uploads to the wrong place, for example different ports > use different datastores on the Dev Server. > > On Sep 14, 9:17 am, Robert Kluin <robert.kl...@gmail.com> wrote: > > > > > db.get() will grab an entity of _any_ kind. Model.get checks that the > > key is for the correct kind of entity before fetching it. Either will > > work. When I use db.get I usually include a check to make sure the > > keys are the correct kind. > > > The key he posted in his initial thread is a Photo. > > > Robert > > > On Tue, Sep 14, 2010 at 11:34, John McLaughlin > > > <johnmclaugh...@massanimation.com> wrote: > > > The one thing that looked off to me is that the line in ServePhoto > > > > photo = db.get(self.request.get("photo_id")) > > > > might want to be > > > > photo = Photo.get(self.request.get("photo_id")) > > > > I think db.get is a datastore method, not an inherited method from > > > db.Model > > > > On Sep 13, 8:09 pm, Robert Kluin <robert.kl...@gmail.com> wrote: > > >> 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 > > > >> <raymond.othenin-gir...@raydropin.com> 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 google-appeng...@googlegroups.com. > > >> > To unsubscribe from this group, send email to > > >> > google-appengine+unsubscr...@googlegroups.com. > > >> > For more options, visit this group > > >> > athttp://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 google-appeng...@googlegroups.com. > > > To unsubscribe from this group, send email to > > > google-appengine+unsubscr...@googlegroups.com. > > > For more options, visit this group > > > athttp://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 google-appeng...@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.