Hi everyone, I am stuck with an issue - please refer to the code below.
1. I have a form (new_entry function) that I will like to use to be able to upload a file among other fields. 2. I am using FORM instead of SQLFORM because one of the dropdown fields (line 11) in the form is generated at run time. 3. The way that I did was to use input file type (line 9) to open a file selection browser / window to select the file - this works OK. 4. If form.vars.uploadfile is not empty, it means that a file had been selected for uploading. 5. I will the want to copy the file into application/<app name>/upload folder using shutils (lines 17-25) but the file name will be changed to entry.file.<random number>.<original file name> 6. However, this does not work as I get the error that the file is not found. 7. For debugging, I print the source file name (line 21) and it only gave me the file name when I will need the entire file path for shutil.copy2() at line 25 to work. *Can someone assist?* Any help will be greatly appreciated. Thank in advance and warm regards Maurice Ling 1. def new_entry(): 2. if session.username == None: redirect(request.env.http_referer + "account/log_in") 3. # get unarchived notebooks 4. else: 5. notebook = [notebook['name'] for notebook in cydb(cydb.notebook.archived == False).select(cydb.notebook.name)] 6. notebook.sort() 7. form = FORM(TABLE( 8. TR('Title: ', INPUT(_type='text', _name='title', _size=80)), 9. TR('File: ', INPUT(_type='file', _name='uploadfile')), 10. TR('tags: ', INPUT(_type='text', _name='tags', _size=80)), 11. TR('Notebook: ', SELECT(notebook, _name='notebook')), 12. TR('Description: ', TEXTAREA(_type='text', _name='description'), 13. TR('',INPUT(_type='submit', _name='SUBMIT'))))) 14. if form.accepts(request.vars, session): 15. notebook = cydb(cydb.notebook.name == form.vars.notebook).select(cydb.notebook.id).as_list()[0]['id'] 16. if form.vars.uploadfile != '': 17. # upload file into applications/<app name>/upload folder 18. import os, random, shutil 19. upload_dir = os.sep.join([os.getcwd(), 'applications', request.application, 'uploads']) 20. sourcefile = form.vars.uploadfile.filename 21. print sourcefile 22. newfile = upload_dir + os.sep + 'entry.file.' + \ 23. str(int(random.random()*10000000000000)) + \ 24. os.path.splitext(sourcefile)[-1] 25. shutil.copy2(sourcefile, newfile) 26. cydb.ent.insert(title=form.vars.title, 27. author=session.username, 28. notebook=notebook_id, 29. tags=form.vars.tags, 30. file=newfile.split(os.sep)[-1], 31. filename=newfile.split(os.sep)[-1], 32. description=form.vars.description) 33. else: 34. # no file to upload 35. cydb.ent.insert(title=form.vars.title, 36. author=session.username, 37. notebook=id, 38. tags=form.vars.tags, 39. file='', 40. filename='', 41. description=form.vars.description) 42. bb.tape.insert(event='New entry created. %s. Title = %s'% \ 43. (cydb(cydb.notebook.id==notebook_id).select(cydb.notebook.name), 44. form.vars.title), 45. user=session.username) 46. response.flash='your entry has been successfully added' 47. return dict(form=form) -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.