将图像从 python 客户端上传到 Flask 服务器

Tom*_*omy 3 python image http flask python-requests

我正在使用requests并将requests_toolbelt图像发送到云端,到目前为止我有这样的东西

import requests
import json
from requests_toolbelt import MultipartEncoder

m = MultipartEncoder(
    fields={"user_name":"tom", "password":"tom", "method":"login",
            "location":"landing", "cam_id":"c00001", "datetime":"hammaTime!"
            ,'image': ('filename', open('image.jpg', 'rb'))}
    )
r = requests.post(url, data=m)
print r.text
Run Code Online (Sandbox Code Playgroud)

到达服务器后,如何取回可用内容的字典?该工具区中的文档 只显示如何发布,而不是如何处理它的另一端。有什么建议吗?

Ian*_*sco 5

你可以看到一个 Flask 服务器的工作示例,它接受你试图在HTTPbin上制作的POSTS。如果您执行以下操作:

m = MultipartEncoder(fields=your_fields)
r = requests.post('https://httpbin.org/post', data=m, headers={'Content-Type': m.content_type})
print(r.json()['form'])
Run Code Online (Sandbox Code Playgroud)

您会看到帖子中的所有内容都应该在该词典中。

使用 HTTPBin 的源代码,您可以看到该form部分是从request.form. 您可以使用它来检索其余数据。然后您可以使用request.files访问您要上传的图像。

Flask 路由处理程序示例如下所示:

@app.route('/upload', methods=['POST'])
def upload_files():
    resp = flask.make_response()
    if authenticate_user(request.form):
        request.files['image'].save('path/to/file.jpg')
        resp.status_code = 204
    else:
        resp.status_code = 411
    return resp
Run Code Online (Sandbox Code Playgroud)

不过,您应该阅读上传文件文档。在 Flask 中使用像这样的常见模式时,这真的是非常宝贵的。