web-dev-qa-db-fra.com

Téléchargement de dossiers et de fichiers avec Flask

Je peux télécharger un fichier avec flask en suivant Téléchargement de fichiers :

  1. Une balise <form> Est marquée avec enctype=multipart/form-data Et un <input type=file> Est placé dans ce formulaire.
  2. L'application accède au fichier à partir du dictionnaire de fichiers sur l'objet de demande.
  3. Utilisez la méthode save() du fichier pour enregistrer le fichier de façon permanente quelque part sur le système de fichiers.

Mais je ne sais pas comment télécharger un dossier ou certains fichiers. J'ai cherché et j'ai trouvé Téléchargement de plusieurs fichiers avec Flask .

Cependant, je ne sais toujours pas comment télécharger un dossier et des fichiers qui appartiennent au dossier.

Pourriez-vous s'il vous plaît dire comment?


Arborescence de répertoires sur laquelle je travaille:

.
├── manage.py
├── templates
│   ├── file_upload.html
│   └── hello.html
└── uploads
    ├── BX6dKK7CUAAakzh.jpg
    └── sample.txt

Code source du téléchargement du fichier:

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)

modèle pour le téléchargement de fichiers (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>
13
SamuraiT
file = request.files['file']

le changer en

file = request.files['file[]']
4
Satyaki Sanyal

le problème ici est que le flacon app.config n'est pas relatif à lui-même, c'est absolu. donc quand vous mettez:

UPLOAD_FOLDER = './uploads' 

flask ne trouve pas ce répertoire et retourne un 500 Erreur. si vous l'avez changé en:

UPLOAD_FOLDER = '/tmp'  

puis téléchargé votre fichier et navigué vers le répertoire/tmp/vous le verriez.

vous devrez modifier votre chemin vers le répertoire approprié pour que le fichier soit téléchargé correctement.

3
GHETTO.CHiLD