繁体   English   中英

Google App Engine和Flask:提供文件

[英]Google App Engine and Flask: Serving Files

我正在GAE上运行Flask。 我在处理文件时遇到问题。 一切似乎都正确,但是浏览器中没有任何弹出窗口提示我保存它,并且日志控制台中没有错误:

@app.route("/submit", methods=["GET"])
def submitChecklist():

... generate json

headers = {'content-type': 'application/json', 'charset':'UTF-8'}
r = requests.post(url, data=json.dumps(jsonstring), headers=headers, stream=True)

print 'payload: ' + r.text
response = make_response(r.text)
response.headers["Content-Disposition"] = "attachment; filename=exportChecklists.xml"

return response

更新

我认为问题可能出在JavaScript端,这是我目前拥有的, 并且不提示下载:

$.get('submit',
        dat, 
        function(data) {
            if (data.success==1)
                console.log("done")
            else
                alert("There is an exception on server side while submitting the response!")
            },'text');

我觉得解决方案就在这里,但我不太清楚。

更新#2

我仍然不知道该怎么做,所以我只提供一个文件。 虽然下面的说明总体上很好,但是我无法弄清楚如何使用jQuery仅提供1个文件。 有人可以提供有关如何执行此操作的示例。

谢谢您的帮助。

这是我为解决问题所做的工作,这可能不是正确的方法,但这是一种:

在JavaScript方面:

$.get('submit',
        dat,
        function(data, status, request) {
            if (status = 'success'){
                console.log(status);
               $("body").append("<iframe src='" + request.getResponseHeader('redirect')+ "' style='display: none;' ></iframe>");
            }
            else 
                alert("There is an exception on server side while submitting the response!");

        }, 
        'xml'); 

在前端Python上:

  headers = {'content-type': 'application/json', 'charset':'UTF-8'}
  r = requests.post(url, data=json.dumps(jsonstring), headers=headers)
  response = make_response(r.text)
  response.headers["Content-Type"] = 'application/xml'
  response.headers.add("redirect", request.url)
  response.headers["Content-Disposition"] = 'attachment; filename="exportChecklists.xml"'

  return response

基本上,我添加了一个重定向URL,这是我开始的请求URL,因此,当文件准备好时,我刚刚创建了一个隐藏的iFrame,现代浏览器会将其重定向到该iFrame并提示下载。

如果有更好的解决方案,请纠正我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM