我完全不熟悉Flask和Web开发,因此请忽略我可能使用的任何缺乏适当术语的语言。
我正在尝试显示一个页面,告诉用户其文件正在打包。完成后端的包装后,我想将它们重定向回它们来自的页面,并向他们发送文件以进行下载。
我仅限于将Flask和Python 2.7用于此任务。
我尝试将html和send_file(path_to_file)
函数都作为一个元组返回,并尝试为send_file()
函数创建一个新线程,但是都没有用。
我不知道下一步该怎么做。
以下代码显示了我现在所在的位置:
import backend
import threading
from flask import request, send_file
def get_package(post_data):
file_path = backend.get_package(post_data)
return send_file(file_path)
@app.route("/pkg_download", method=['POST'])
def pkg_download():
post_data = dict(request.form.iterlists())
result = threading.Thread(None, target=get_package, args=[post_data])
result.start()
html_dialog = "<p>Packaging Images</p>"
return html_dialog
运行上面的命令时,出现此错误:
RuntimeError: Working outside of application context.
而不是显示html,然后在打包完成后下载文件。
但是,再次重申,我真的不知道我在做什么,这可能是解决此问题的完全错误的方法。任何帮助将不胜感激。
答案 0 :(得分:0)
不应在直接向服务器发送的API请求中完成您要执行的操作。创建档案可能需要一些时间,通常最好直接响应收到的请求并启动后台任务以执行更长的操作。
较长的操作成功后,您可以向客户端发送一条消息,告诉客户归档文件已可供他下载。
实施主张:
此实现将允许您编写以下逻辑,并在网站的前端具有此行为:
瞧,你应该很好。