如何使用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())通过使用这种方法,我可以重定向,但文件没有被下载,所以我注意到当我重定向时,它会删除那些文件,所以为了再次尝试,我切换到主页的路径,并再次启动我的网站。由于遇到同样的问题,重定向正在工作,但文件未被下载

在我看来,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>

最新更新