用于发布数据和图像的FlaskAPI

用于发布数据和图像的FlaskAPI,api,flask,post,Api,Flask,Post,我有点困惑。我想创建可以发布图像的API,以及一个与该图像一起发布的字典。我怎么做?对于一个图像,我可以这样做。如果我想发布另一个不是文件的变量,比如variablemeta_data,该怎么办 url = 'http://127.0.0.1:5000/im_size' my_img = {'image': open('test.jpg', 'rb')} r = requests.post(url, files=my_img) 在我的API脚本中应该做什么更改 from flask impor

我有点困惑。我想创建可以发布图像的API,以及一个与该图像一起发布的字典。我怎么做?对于一个图像,我可以这样做。如果我想发布另一个不是文件的变量,比如variablemeta_data,该怎么办

url = 'http://127.0.0.1:5000/im_size'
my_img = {'image': open('test.jpg', 'rb')}
r = requests.post(url, files=my_img)
在我的API脚本中应该做什么更改

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/im_size", methods=["POST"])
def process_image():
    file = request.files['image']
    # Read the image via file.stream
    img = Image.open(file.stream)

    return jsonify({'msg': 'success', 'size': [img.width, img.height]})


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

requests.post
,为该数据设置正确的内容类型(
'application/json'
),然后通过
request.get_json()
方法访问该数据

但是,当您同时提供
文件
参数时,就会出现这种情况,该参数将内容类型设置为
“多部分/表单数据”

在我的帮助下,我发现解决方案是将JSON数据作为多部分表单的一部分发送

因此,在客户端定义一个字典,并将其添加到
my\u img
dict中,如下所示:

import json

meta_data = {'message':'I am a picture', 'another_message':'About to upload'}

my_img = {'image': open('test.jpg', 'rb'),
          'json_data':  ('j', json.dumps(meta_data), 'application/json')}
然后,在服务器端,您还需要导入json,并且在
process_image
查看功能中,您可以通过以下方式访问该数据:

    json_data = request.files['json_data']
    meta_data = json.load(json_data)

    print (meta_data)
    print (json_data.filename)
服务器输出:

{'message': 'I am a picture', 'another_message': 'About to upload'}
j