如何使用 Flask 下载文件并将用户重定向到另一个网页?

How to download file and redirect user to another webpage using flask?

所以我一直在尝试制作一个网站,但遇到了一个问题 这是我的代码

@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") 

所以我找到了这个 return send_from_directory() and redirect(url_for()) from here 通过使用这种方法我可以重定向但是文件没有被下载所以然后我注意到当我重定向它时删除了那些文件所以只是为了再次尝试我将路径切换到主页和再次启动我的网站我遇到了同样的问题重定向正在工作但是文件没有被下载

在我看来,flask 无法在同一路径中提供文件和重定向。
如果你想发送文件然后删除它,我推荐
如果用户同意删除文件,我建议用 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>