FLASK:在API代理后面向浏览器提供文件

时间:2015-04-22 18:40:00

标签: python api proxy flask

当用户输入http://example2.com:5500/?param=x时,下面的代码会生成一个data.csv文件并将其提供给浏览器。它完全像这样。

但是,我已将其部署在API代理后面,以便用户调用内部转换为http://example1.com/?param=x的{​​{1}}。

因此,它不像以前那样向浏览器提供data.csv,而是在浏览器上显示所有data.csv内容。视图源代码功能显示了data.csv应该包含的内容,没有任何HTML头,只有data.csv内容,但它不作为附件提供。有什么想法吗?

http://example2.com:5500/?param=x

编辑:包含映射代码以将请求转换为example1.com到example2.com(secret_url)

from flask import make_response

@app.route('/', methods = ['GET'])
def get_file():

    alldata = []

    while len(new_data) > 0:
            new_data = api.timeline(max_id=oldest)
            alldata.extend(new_data)
            oldest = alldata[-1].id - 1    

    outdata = ""
    for data in alldata:
            outdata += ",".join(data) + "\n"

    response = make_response(outdata)
    response.headers["Content-Disposition"] = "attachment; filename=data.csv"

    return response


if __name__ == '__main__':
  app.run(host = app.config['HOST'], port = app.config['PORT'])

1 个答案:

答案 0 :(得分:1)

您的本地代理不会将标头返回给应用程序。试试这个:

@app.route("/api/<projectTitle>/<path:urlSuffix>", methods=['GET'])
def projectTitlePage(projectTitle, urlSuffix):

    # ...

    return r.text, r.status_code, r.headers