HTML:
<form action="/upload" method="post" enctype="multipart/form-data"> Category: <input type="text" name="category" /> Select a file: <input type="file" name="upload" /> <input type="submit" value="Start upload" /> </form>
View:
@route('/upload', method='POST') def do_login(): category = request.forms.get('category') upload = request.files.get('upload') name, ext = os.path.splitext(upload.filename) if ext not in ('png','jpg','jpeg'): return 'File extension not allowed.' save_path = get_save_path_for_category(category) upload.save(save_path) # appends upload.filename automatically return 'OK'
I'm trying to do this code but it is not working. What I'm doing wrong?
Bottle framework learning checklist Download Bottle or install via pip with pip install bottle on your local development machine. Work through the official Bottle tutorial. Start coding your Bottle app based on what you learned in the official tutorial plus reading open source example applications found above.
Run this script or paste it into a Python console, then point your browser to http://localhost:8080/hello/world. That's it. Install the latest stable release with pip install bottle or download bottle.py (unstable) into your project directory. There are no hard [1] dependencies other than the Python standard library.
Starting from bottle-0.12 the FileUpload class was implemented with its upload.save() functionality.
Here is example for the Bottle-0.12:
import os from bottle import route, request, static_file, run @route('/') def root(): return static_file('test.html', root='.') @route('/upload', method='POST') def do_upload(): category = request.forms.get('category') upload = request.files.get('upload') name, ext = os.path.splitext(upload.filename) if ext not in ('.png', '.jpg', '.jpeg'): return "File extension not allowed." save_path = "/tmp/{category}".format(category=category) if not os.path.exists(save_path): os.makedirs(save_path) file_path = "{path}/{file}".format(path=save_path, file=upload.filename) upload.save(file_path) return "File successfully saved to '{0}'.".format(save_path) if __name__ == '__main__': run(host='localhost', port=8080)
Note: os.path.splitext() function gives extension in ".<ext>" format, not "<ext>".
If you use version previous to Bottle-0.12, change:
... upload.save(file_path) ...
to:
... with open(file_path, 'wb') as open_file: open_file.write(upload.file.read()) ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With