It looks like you're recreating the sample application from the docs. That example glossed over one important piece of information, which can be found here:

The get_uploads() method returns a list of BlobInfo objects, one for each uploaded file in the request.

So if you wanted to capture the file name, for example, you would need to do something like this in your upload handler (and adjust your UserPhoto model accordingly):

upload = self.get_uploads()[0] user_photo = UserPhoto( user=users.get_current_user().user_id(), blob_key=upload.key(), filename=upload.filename ) user_photo.put()

The get_uploads method returns a list of BlobInfo objects. Docs on those objects can be found here:

Note: I don't have any experience with uploads on AppEngine and this code has not been tested, so it may be off in some of the details. I'm just going by the docs. But I suspect it gets to the underlying issue. If any details need to be changed, let me know.