This demonstrates how to manually handle file uploads in web2py (without any SQLForm magic.)
model:
db.define_table('image', Field('title'), Field('file', 'upload'), format = '%(title)s')
controller:
def download(): return response.download(request,db) def link(): return response.download(request,db,attachment=False) def index(): image_form = FORM( INPUT(_name='image_title',_type='text'), INPUT(_name='image_file',_type='file') ) if image_form.accepts(request.vars,formname='image_form'): image = db.image.file.store(image_form.vars.image_file.file, image_form.vars.image_file.filename) id = db.image.insert(file=image,title=image_form.vars.image_title) images = db().select(db.image.ALL) return dict(images=images)
view:
{{extend "layout.html"}} <form action="" enctype="multipart/form-data" method="post"> <input name="_formname" type="hidden" value="image_form"> <input class="string" name="image_title" type="text" value=""> <input class="upload" name="image_file" type="file"> <input type="submit" value="Submit"> </form> <ul> {{for image in images:}} <li> <a href="{{=URL(f='link', args=image.file)}}"> <img src="{{=URL(f='link', args=image.file)}}"/> {{=image.title}} </a> <a href="{{=URL(f='download', args=image.file)}}"> [Download] </a> </li> {{pass}} </ul>
(Of course we could just use the serialized form in the view, but I like to render my views by hand to show what's going on)
Reference:
Comments (1)
0
joecodeswell 12 years ago
Hi Yarin,
This is just what i was looking for. I found a small nit however. When i first ran the code, i got an error with a ticket that said:
"UnboundLocalError: local variable 'images' referenced before assignment." referring to the controller statement at line 18 "
"
I put this statement "images = [] # needed this on first go around" just before the if and things seemed to go smoothly.
Thanks again, for a great recipe.
Love and peace,
Joe
replies (1)