Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to upload and save a file using bottle framework

Tags:

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?

like image 835
William Nakagawa Avatar asked Feb 24 '13 08:02

William Nakagawa


People also ask

How do you run a bottle app?

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.

How do you run a Python bottle?

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.


1 Answers

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())     ... 
  • Run server;
  • Type "localhost:8080" in your browser.
like image 172
Stanislav Avatar answered Sep 28 '22 08:09

Stanislav