I can upload a File with flask by following Uploading Files:
<form>
tag is marked with enctype=multipart/form-data
and an <input type=file>
is placed in that form.save()
method of the file to save the file permanently somewhere on the filesystem.But I don't know how to upload folder or some files. I searched, and I found Uploading multiple files with Flask.
However, still I don't know how to upload a folder and files that belong to the folder.
Could you please tell how?
Directory tree I am working on:
.
├── manage.py
├── templates
│ ├── file_upload.html
│ └── hello.html
└── uploads
├── BX6dKK7CUAAakzh.jpg
└── sample.txt
Source code of uploading file:
from flask import Flask,abort,render_template,request,redirect,url_for
from werkzeug import secure_filename
import os
app = Flask(__name__)
UPLOAD_FOLDER = './uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/')
def index():
return redirect(url_for('hello'))
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name = None):
return render_template('hello.html',name=name)
@app.route('/upload/',methods = ['GET','POST'])
def upload_file():
if request.method =='POST':
file = request.files['file']
if file:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
return hello()
return render_template('file_upload.html')
if __name__ == '__main__':
app.run(debug = True)
template for file uploading(manage.py):
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form action='' method="POST" enctype="multipart/form-data">
<p><input type='file' name='file[]' multiple=''>
<input type='submit' value='upload'>
</p>
</form>
Handling file upload in Flask is very easy. It needs an HTML form with its enctype attribute set to 'multipart/form-data', posting the file to a URL. The URL handler fetches file from request. files[] object and saves it to the desired location.
Flask File Uploads Save uploads on the serverUse getlist — instead of [] or get — if multiple files were uploaded with the same field name. The objects in request. files have a save method which saves the file locally. Create a common directory to save the files to.
file = request.files['file']
change it to
file = request.files['file[]']
the issue here is that flask's app.config
isn't relative to itself, it's absolute. so when you put:
UPLOAD_FOLDER = './uploads'
flask doesn't find this directory and returns a 500
error.
if you changed it to:
UPLOAD_FOLDER = '/tmp'
and then uploaded your file and navigated to the /tmp/ directory you would see it.
you will need to edit your path to the proper directory for the file to be uploaded properly.
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