【问题标题】:POST image and json data in single API in FLASK在 FLASK 中的单个 API 中发布图像和 json 数据
【发布时间】:2021-09-10 16:16:53
【问题描述】:

我有一种情况,我需要使用单个 API 请求将图像和 json 数据发布到数据库。当我尝试发布没有图像的请求时,它工作正常。当我尝试将图像和 json 添加在一起时,它会引发错误,就像我使用邮递员发送请求时一样。

任何人都可以建议解决此问题的最佳方法吗?

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

客户:

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)

【问题讨论】:

    标签: python postgresql flask postman flask-sqlalchemy


    【解决方案1】:

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

    {
        "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"
    }
    

    【讨论】:

    • 如果我存储在 base64 中会影响性能吗?我可以将 base64 存储在 db 的 bytea 列中吗?
    • 转换为 base64 的开销应该是最小的。您应该能够将 base64 数据直接存储在您的数据库中,并且只有在必须显示时才对其进行解码。
    猜你喜欢
    • 2020-12-05
    • 2021-01-08
    • 2013-12-06
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多