Python Flask:发送文件和变量

时间:2017-08-16 19:16:51

标签: python flask python-requests

我有两个服务器,其中一个尝试从另一个获取文件。我正在使用Flask get请求来回发送简单数据(字符串,列表,JSON对象等)。

我也知道如何只发送一个文件,但我需要发送一个包含我的数据的错误代码。

我使用了以下内容:

服务器1:

req = requests.post('https://www.otherserver.com/_download_file', data = {'filename':filename})

服务器2:

@app.route('/_download_file', methods = ['POST'])
def download_file():
    filename = requests.form.get('filename')

    file_data = codecs.open(filename, 'rb').read()
    return file_data

服务器1:

with codecs.open('new_file.xyz', 'w') as f:
    f.write(req.content)

......所有这些都很好。但是,我想发送一个错误代码变量和file_data,以便服务器1知道状态(而不是HTTP状态,但是内部状态代码)。

感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

我想到的一个解决方案是使用自定义HTTP标头。

以下是服务器和客户端实现的示例。

当然,您可以根据需要随意更改自定义标题的名称和值。

服务器

from flask import Flask, send_from_directory

app = Flask(__name__)

@app.route('/', methods=['POST'])
def index():
    response = send_from_directory(directory='your-directory', filename='your-file-name')
    response.headers['my-custom-header'] = 'my-custom-status-0'
    return response

if __name__ == '__main__':
    app.run(debug=True)

<强>客户端

import requests

r = requests.post(url)

status = r.headers['my-custom-header']

# do what you want with status

<强>更新

以下是基于您的实施的服务器的另一个版本

import codecs

from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/', methods=['POST'])
def index():
    filename = request.form.get('filename')

    file_data = codecs.open(filename, 'rb').read()
    response = make_response()
    response.headers['my-custom-header'] = 'my-custom-status-0'
    response.data = file_data
    return response

if __name__ == '__main__':
    app.run(debug=True)