在FLASK中的单个API中发布图像和json数据

2024-10-03 15:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用单个API请求将图像和json数据发布到数据库中。当我尝试在没有图片的情况下发布请求时,效果很好。当我尝试将图像和json添加到一起时,它会抛出一个错误,就像我使用postman发送请求一样

有人能提出解决这个问题的最佳方法吗

werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'file

服务器

@app.route("/testresult", methods=["POST"])
def testresult():
    if request.method == "POST":
        file = request.files['file']
        traynumber = request.json['traynumber']
        sample_number = request.json["sample_number"]
        test_started = request.json['test_started']
        test_ended= request.json['test_ended']
        resultstatus = request.json['resultstatus']
        traydetails = Traydetails.query.filter(Traydetails.traynumber ==traynumber).first_or_404()
        trayid = traydetails.id
        sampleimage = file.read()
        add_sampleresult = Sampletestresult(trayid,sample_number,test_started,test_ended,resultstatus,sampleimage)
        db.session.add(add_sampleresult)
        db.session.commit()
        return file.filename

客户:

enter image description here

import requests
url = 'http://localhost:5000/testresult'
ig = r'C:\Users\Admin\Pictures\test\cat.jpg'
files = {'file': open(ig, 'rb')}
payload = {"traynumber":"868032cd60444cfca6558ce575c13c0a_1","sample_number":1,"test_started":"2021-06-24 15:30:20","test_ended": "2021-06-24 16:30:20","resultstatus": 1}
value = requests.post(url,files=files,json=payload,verify=False,)
print(value.content)


Tags: orsampletest图像addjsonnumberrequest
1条回答
网友
1楼 · 发布于 2024-10-03 15:34:41

据我所知,由于编码类型的原因,您不能拥有。但是,您可以做的是将图像转换为base64(example in Pythonexample in JS),并在JSON中包含base64包含的图像数据

{
    "traynumber":"868032cd60444cfca6558ce575c13c0a_1",
    "sample_number":1,
    "test_started":"2021-06-24 15:30:20",
    "test_ended": "2021-06-24 16:30:20",
    "resultstatus": 1,

    "image_data": "iVBORw0KGg ...your base64 encoded image"
}

相关问题 更多 >