Outils pour utilisateurs

Outils du site


python:flask:upload

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
python:flask:upload [2020/12/05 08:56]
marclebrun [Utilisation du fichier]
python:flask:upload [2021/10/08 07:39] (Version actuelle)
marclebrun [Javascript]
Ligne 3: Ligne 3:
 Tutoriel: [[https://​pythonise.com/​series/​learning-flask/​flask-uploading-files]] Tutoriel: [[https://​pythonise.com/​series/​learning-flask/​flask-uploading-files]]
  
-===== Template formulaire ​=====+===== 1. Upload traditionnel ​=====
  
-//Cet exemple utilise **Bootstrap** pour styler le formulaire.//+==== Template ​formulaire ​====
  
 <code html upload.html>​ <code html upload.html>​
-<div class="​container"​> +<h1>Uploader un fichier</h1>
-    ​<div class="​row">​ +
-        <div class="​col"​>+
  
-            <​h1>​Uploader un fichier</​h1>​ +<form method="​POST"​ enctype="​multipart/​form-data">​ 
- +    <input type="​file"​ name="​fichier"​ id="​fichier">​ 
-            ​<form method="​POST"​ enctype="​multipart/​form-data">​ +    <label for="​fichier">​Sélectionnez un fichier...</​label>​ 
- +    <button type="​submit">​Envoyer</​button>​ 
-                <div class="​form-group">​ +</​form>​
-                    <div class="​custom-file">​ +
-                        ​<input type="​file"​ +
-                               ​class="​custom-file-input"​ +
-                               name="​fichier"​ id="​fichier">​ +
-                        <label for="​fichier+
-                               ​class="​custom-file-label">​Sélectionnez un fichier...</​label>​ +
-                    </​div>​ +
- +
-                    ​<button type="​submit" class="​btn btn-primary mt-3">Uploader</​button>​ +
- +
-                </​div>​ +
- +
-            ​</form+
- +
-        </​div>​ +
-    </​div>​ +
-</div>+
 </​code>​ </​code>​
  
-===== Vue =====+==== Vue ====
  
 <code python app.py> <code python app.py>
 @app.route("/​test_upload",​ methods=["​GET",​ "​POST"​]) @app.route("/​test_upload",​ methods=["​GET",​ "​POST"​])
 def test_upload():​ def test_upload():​
 +
 +    # Si le formulaire a été posté
     if request.method == "​POST":​     if request.method == "​POST":​
         if request.files:​         if request.files:​
Ligne 49: Ligne 32:
             return redirect(request.url)             return redirect(request.url)
                 ​                 ​
 +    # Sinon afficher le formulaire
     return render_template("​upload.html"​)     return render_template("​upload.html"​)
 </​code>​ </​code>​
  
-===== Utilisation du fichier ​=====+==== Utilisation du fichier ====
  
 Pour utiliser le fichier uploadé il faut l'​enregistrer quelque part. Pour utiliser le fichier uploadé il faut l'​enregistrer quelque part.
Ligne 80: Ligne 64:
 ^ secure_filename ​   | "​nettoyage"​ du nom du fichier ​  | ^ secure_filename ​   | "​nettoyage"​ du nom du fichier ​  |
  
 +==== Sécurité ====
 +
 +Vérifier qu'il y a bien eu un fichier sélectionné :
 +
 +<code python>
 +fichier = request.files["​fichier"​]
 +if fichier.filename:​
 +    ...
 +else:
 +    flash(u"​Veuillez sélectionner un fichier !", "​danger"​)
 +    return redirect(request.url)
 +</​code>​
 +
 +Vérifier que le type fichier est autorisé :
 +
 +<code python>
 +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)
 +</​code>​
 +
 +===== 2. Upload via Ajax =====
 +
 +==== Formulaire ====
 +
 +<code html upload.html>​
 +<​h1>​Ajax File Upload</​h1>​
 +     
 +<form id="​frmUpload"​ method="​POST"​ enctype="​multipart/​form-data">​
 +    <label for="​edtFile">​Sélectionnez un fichier à uploader</​label><​br/>​
 +    <input type="​file"​ name="​edtFile"​ id="​edtFile"><​br/>​
 +    <button id="​btnUpload">​Envoyer</​button>​
 +</​form>​
 +</​code>​
 +
 +==== Javascript ====
 +
 +<code javascript upload.js>​
 +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(
 +        //...
 +    )
 +}
 +</​code>​
 +
 +==== Vue ====
 +
 +<code python app.py>
 +@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)
 +</​code>​
  
python/flask/upload.1607158565.txt.gz · Dernière modification: 2020/12/05 08:56 (modification externe)