将图像发布到 REST API 并使用 Falcon 库收集数据的正确方法是什么?

ero*_*gol 5 api rest upload post falconframework

我尝试发布图像以通过 REST API 处理它。我使用 falcon 作为后端,但不知道如何发布和接收数据。

这就是我目前发送文件的方式

img = open('img.png', 'rb')
r = requests.post("http://localhost:8000/rec",
files={'file':img},
data = {'apikey' : 'bla'})
Run Code Online (Sandbox Code Playgroud)

然而,在 Falcon 存储库中,他们说 Falcon 不支持 HTML 表单发送数据,而是针对 POST 和 PUT 数据的全部范围,我不区分 POST 图像数据和上面发送的数据。

因此,最终,我想了解发送图像并通过 REST API 接收图像的正确解决方法,该 API 据称是由 Falcon 编写的。你能给一些指点吗?

Har*_*iya 2

为此,您可以使用以下方法:

猎鹰 API 代码:

import falcon
import base64
import json

app = falcon.API()
app.add_route("/rec/", GetImage())

class GetImage:

    def on_post(self, req, res):

        json_data = json.loads(req.stream.read().decode('utf8'))
        image_url = json_data['image_name']
        base64encoded_image = json_data['image_data']
        with open(image_url, "wb") as fh:
            fh.write(base64.b64decode(base64encoded_image))

        res.status = falcon.HTTP_203
        res.body = json.dumps({'status': 1, 'message': 'success'})
Run Code Online (Sandbox Code Playgroud)

对于 API 调用:

import requests
import base64

with open("yourfile.png", "rb") as image_file:
    encoded_image = base64.b64encode(image_file.read())

r = requests.post("http://localhost:8000/rec/", 
                  data={'image_name':'yourfile.png',
                        'image_data':encoded_image
                       }
                 )
print(r.status_code, r.reason)
Run Code Online (Sandbox Code Playgroud)

我希望这个能帮上忙。