====== Upload ====== Tutoriel: [[https://pythonise.com/series/learning-flask/flask-uploading-files]] ===== 1. Upload traditionnel ===== ==== Template formulaire ====

Uploader un fichier

==== Vue ==== @app.route("/test_upload", methods=["GET", "POST"]) def test_upload(): # Si le formulaire a été posté if request.method == "POST": if request.files: fichier = request.files["fichier"] # ... faire quelque chose avec le fichier ... return redirect(request.url) # Sinon afficher le formulaire return render_template("upload.html") ==== Utilisation du fichier ==== Pour utiliser le fichier uploadé il faut l'enregistrer quelque part. Définir une valeur dans la configuration. Le chemin doit être absolu. Il peut être en dehors de l'application. Par exemple : app.config['UPLOAD_PATH'] = "/home/marc/website/uploads" Ensuite : import os from werkzeug.utils import secure_filename filename = secure_filename(fichier.filename) fichier.save(os.path.join(app.config["UPLOAD_PATH"], filename)) ^ fichier.filename | Nom original du fichier uploadé | ^ fichier.save(path) | Enregistre le fichier | ^ secure_filename | "nettoyage" du nom du fichier | ==== Sécurité ==== Vérifier qu'il y a bien eu un fichier sélectionné : fichier = request.files["fichier"] if fichier.filename: ... else: flash(u"Veuillez sélectionner un fichier !", "danger") return redirect(request.url) Vérifier que le type fichier est autorisé : ext = filename.rsplit(".", 1)[1] if ext.upper() in ["JPEG", "JPG", "PNG", "GIF"]: ... else: flash(u"Ce type de fichier n'est pas autorisé !", "danger") return redirect(request.url) ===== 2. Upload via Ajax ===== ==== Formulaire ====

Ajax File Upload



==== Javascript ==== let frmUpload = document.getElementById('frmUpload'); let btnUpload = document.getElementById('btnUpload'); btnUpload.addEventListener('click', event => { btnUploadClick(event) }); function btnUploadClick(event) { event.preventDefault(); fetch('/upload', { method: 'POST', body : new FormData(frmUpload) }).then( //... ) } ==== Vue ==== @app.route("/upload", methods=["POST"]) def upload(): result = {} if 'edtFile' in request.files: if request.files['edtFile'].filename: fichier = request.files['edtFile'] fichier.save('/home/marc/...') # ... else: result['error'] = "Erreur, il n'y a pas de fichier." return jsonify(result)