Hi Ken,
Thanks for sharing this.  I was faced with a similar issue but my solution
sucks.

On Fri, Sep 18, 2009 at 6:45 AM, KenCorey <[email protected]> wrote:

>
> Okay, got it sorted (finally)!
>
> Here's the code to do multiple fields with some random file uploads.
> I hope this helps someone else.  (How does one go about getting this
> added to the cookbook?)
>
> I was wrong about the ** not being needed.  Yes, as a matter of fact,
> I /am/ a goober.  Often.
>
> A couple gotcha's not mentioned on the cookbook page:
> 1) inputs to web.input() *must* be str strings and not unicode
> strings.  These are not the same things, apparently.  That wasn't
> clear to me before...;^)
> 2) If your file fields are going to be getting binary data (uploading
> images), you must put _unicode=True as the first argument to web.input
> ().
>
> --------------------------------------------
> import web
>
> urls = ('/upload', 'Upload')
>
> class Upload:
>    def GET(self):
>        # put the list of image names in the session
>        # NOTE: These /must/ be str strings, not unicode!!!!
>        # These are the names of the fields on the form.  They must be
> stored in the session
>        # so that they can be picked up during the post.  If the user
> waits to submit these until
>        # after the session dies, the file uploads won't work.
>        web.config._session['images']=['image-2.0','image-4.0']
>
>        return """<html><head></head><body>
> <form method="POST" enctype="multipart/form-data" action="">
> <p><input type="input" name="question-1.0" />First question
> <p><input type="file" name="image-2.0" />First image
> <p><input type="input" name="question-3.0" />Second question
> <p><input type="file" name="image-4.0" />Second image
> <br/>
> <input type="submit" />
> </form>
> </body></html>"""
>
>    def POST(self):
>        # get the image names
>        images = web.config._session['images']
>        myfiles = {}
>        for k in images:
>            myfiles[k] = {}
>
>        x = web.input(_unicode=True,**myfiles)
>        web.debug(x['image-2.0'].filename) # This is the filename
>        web.debug(x['image-2.0'].value) # This is the file contents
>        web.debug(x['image-2.0'].file.read()) # Or use a file(-like)
> object
>        raise web.seeother('/upload')
>
> if __name__ == "__main__":
>   app = web.application(urls, globals())
>   web.config._session = web.session.Session(app, web.session.DiskStore
> ('/tmp/sessions'), {'count': 0,'logged_in':0})
>   app.run()
> --------------------------------------------
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web.py" 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/webpy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to