Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Folder and files upload with Flask

I can upload a File with flask by following Uploading Files:

  1. A <form> tag is marked with enctype=multipart/form-data and an <input type=file> is placed in that form.
  2. The application accesses the file from the files dictionary on the request object.
  3. Use the 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>
like image 701
SamuraiT Avatar asked Nov 11 '13 03:11

SamuraiT


People also ask

How do I upload files using flask?

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.

How do I store files in flask?

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.


2 Answers

file = request.files['file']

change it to

file = request.files['file[]']
like image 130
Satyaki Sanyal Avatar answered Oct 13 '22 16:10

Satyaki Sanyal


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.

like image 43
GHETTO.CHiLD Avatar answered Oct 13 '22 16:10

GHETTO.CHiLD