lundi 9 mars 2015

web.py file upload using the built in File form

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