Python Flask:发送文件和变量

elP*_*tor 1 python flask python-requests

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

我也知道如何仅发送文件,但是我需要随数据发送错误代码。

我正在使用以下内容:

服务器1:

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

服务器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
Run Code Online (Sandbox Code Playgroud)

服务器1:

with codecs.open('new_file.xyz', 'w') as f:
    f.write(req.content)
Run Code Online (Sandbox Code Playgroud)

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

任何帮助表示赞赏。

oha*_*nes 5

我想到的一种解决方案是使用自定义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)
Run Code Online (Sandbox Code Playgroud)

客户

import requests

r = requests.post(url)

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

# do what you want with status
Run Code Online (Sandbox Code Playgroud)

更新

这是根据您的实现的服务器的另一个版本

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)
Run Code Online (Sandbox Code Playgroud)