I'm trying to make a working file upload form using the built in input form. It works just fine with a 'static' html input form (using shutil.copyfileobject), but it won't work using the built in one.
import web, shutil
from web import form
urls = ('/', 'Index')
app = web.application(urls, globals())
render = web.template.render()
fileForm = form.Form(form.File('myfile'))
class Index(object):
def GET(self):
f = fileForm()
return render.index(f)
def POST(self):
f = fileForm()
fi = f['myfile']
mydir = 'uploads/'
shutil.copy(fi, mydir)
if __name__ == "__main__":
app.run()
And templates/index.html
$def with (f)
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
<form name="main" method="post" enctype="multipart/form-data" action="">
$:f.render()
<input type="submit">
</form>
</body>
</html>
Errors:
<type 'exceptions.TypeError'> at /
coercing to Unicode: need string or buffer, File found
Python
C:\Python27\lib\ntpath.py in abspath, line 486
Web
POST http://localhost:8080/
Traceback (innermost first)
C:\Python27\lib\ntpath.py in abspath
479.
480.else: # use native Windows method on Windows
481. def abspath(path):
482. """Return the absolute version of a path."""
483.
484. if path: # Empty path must return current working directory.
485. try:
486. path = _getfullpathname(path) ...
487. except WindowsError:
488. pass # Bad path - return unchanged.
489. elif isinstance(path, unicode):
490. path = os.getcwdu()
491. else:
492. path = os.getcwd()
The built in File doesn't seem to return an object, so shutil.copyfileobject does not seem to work.
Please help me sort it out.
Aucun commentaire:
Enregistrer un commentaire