Comment télécharger le fichier et rediriger l'utilisateur vers une autre page Web à l'aide du flacon ?


Enquêteur

j'ai donc essayé de créer un site Web et je rencontre un problème voici mon code

@app.route("/Download")
def download_final():
    lol = os.environ.get("hell")
    path = (f"Downloads/{lol}")
    return send_file(path, as_attachment=True)

@app.route('/remove')
def remove():
    os.remove("key.key")
    foo = os.environ.get("hell")
    os.remove(f"Downloads/{foo}")
    return render_template("remove.html") 

  • voulez télécharger le fichier, puis rediriger l'utilisateur vers une autre page Web où l'utilisateur peut accepter et supprimer le fichier du serveur.

J'ai donc trouvé ceci à return send_from_directory() and redirect(url_for()) partir d'ici en utilisant cette méthode, je suis capable de rediriger mais le fichier n'est pas en cours de téléchargement, alors j'ai remarqué que lorsque je le redirige, supprime ces fichiers. Pour réessayer, j'ai basculé le chemin vers la page d'accueil et redémarré mon site Web. J'obtiens le même problème que la redirection fonctionne mais le fichier n'est pas en cours de téléchargement

Detlef

À mon avis, il n'est pas possible avec flask de servir un fichier et de le rediriger dans le même itinéraire.
Si vous souhaitez envoyer le fichier puis le supprimer, je vous recommande cette réponse .
Si l'utilisateur doit donner son consentement pour supprimer le fichier, je suggère de l'implémenter avec javascript.

from flask import Flask
from flask import render_template, send_from_directory

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/download')
def download():
    fname = 'example.jpg'
    return send_from_directory(app.static_folder, fname)

@app.route('/remove')
def remove():
    # remove file here!
    return render_template('remove.html')
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Index</title>
  </head>
  <body>

    <button id="download">Download</button>
    <script>
      (function() {

        const save = (data, filename) => {
          const elem = document.createElement('a');
          elem.href = URL.createObjectURL(data);
          elem.download = filename;
          elem.click();
        };

        const download = (url, callback) => {
          fetch(url)
            .then(res => res.blob())
            .then(data => {
              callback(data);
            });
        }

        const elem = document.querySelector('#download');
        elem.addEventListener('click', (evt) => {
          download('/download', (data) => {
            save(data, 'example.jpg');

            const shouldDeleteFile = confirm("Want to delete?");
            if (!shouldDeleteFile) return;
            
            location.href = '/remove';
          });
        });

      })();
    </script>

  </body>
</html>

Articles connexes