2

我正在尝试解码在我的POST请求中上传的图像文件。

我处理上传的类文件:

class Images(object):

    def on_post(self, req, resp):
        name = req.stream.read()
        helpers.write_json(resp, falcon.HTTP_200, {
            'name':str(name)
        })

调用 API,并添加名称和图像文件。图像名称“youtried.jpg”与我正在运行的文件“curl.py”处于同一级别。

url = 'http://localhost/service/images'
files = {
    'name': 'Jon Snow',
    'image': (open('youtried.jpg', 'rb').read())
}

r = requests.post(url, headers={'Content-type': 'multipart/form-data'},files=files)

print (json.loads(r.text))

我也试过改变

name = req.stream.read()

name = req.stream.read().decode('utf-8')

name = req.stream.read().decode('utf-16')

让我知道是否有正确的方法可以做到这一点。

4

1 回答 1

6

Falcon 本身不支持处理 multipart/form-data 请求(包括文件上传),因此您必须使用第三方插件,例如falcon-multipart

只需使用 pip 安装它,例如:

pip install falcon-multipart

并将其用作中间件,例如:

from falcon_multipart.middleware import MultipartMiddleware
app = falcon.API(middleware=[MultipartMiddleware()])

然后在您的图像类中,读取文件或文件名:

image = req.get_param('image')
# Read image as binary
raw = image.file.read()
# Retrieve filename
filename = image.filename

因此,在您的代码上下文中,这是正确且完整的版本:

import falcon
import json

from falcon_multipart.middleware import MultipartMiddleware


class Images(object):

    def on_post(self, req, resp):
        image = req.get_param('image')
        # only if you need the image data
        # raw = image.file.read()
        filename = image.filename
        helpers.write_json(resp, falcon.HTTP_200, {
            'name': filename
        })


app = falcon.API(middleware=[MultipartMiddleware()])
app.add_route('/service/images', Images())
于 2016-05-31T05:11:55.263 回答