我正在尝试解码在我的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')
如果有正确的方法,请告诉我。
答案 0 :(得分:4)
Falcon本身并不支持处理多部分/表单数据请求(包括文件上传),因此您必须使用第三方加载项,例如falcon-multipart。
只需使用pip安装它,例如:
pip install falcon-multipart
并将其用作中间件,例如:
from falcon_multipart.middleware import MultipartMiddleware
app = falcon.API(middleware=[MultipartMiddleware()])
然后在Images类中,使用以下命令读取文件或文件名:
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())