Python aiohttp服务器文件上载:request.post UnicodeDecodeError

Python aiohttp服务器文件上载:request.post UnicodeDecodeError,python,aiohttp,Python,Aiohttp,我在Flask中有一个web服务,它处理上传的二进制数据: @app.route('/v1/something',methods=['POST']) def v1_something(): 对于request.files中的名称: 文件=请求。文件[名称] file.read()文件 ... 现在我将它重写为AIOHTTP,但是在文件处理方面有一些问题。我的代码: @routes.post(“/v1/something”) 异步def v1_某物(请求): files=wait request

我在Flask中有一个web服务,它处理上传的二进制数据:

@app.route('/v1/something',methods=['POST'])
def v1_something():
对于request.files中的名称:
文件=请求。文件[名称]
file.read()文件
...
现在我将它重写为AIOHTTP,但是在文件处理方面有一些问题。我的代码:

@routes.post(“/v1/something”)
异步def v1_某物(请求):
files=wait request.post()
对于文件中的名称:
file=文件[名称]
file.read()文件
...
我在
wait request.post()行中得到一个错误:

UnicodeDecodeError:“utf-8”编解码器无法解码位置14中的字节0x80:无效的开始字节


看起来AIOHTTP试图将给定的二进制文件作为文本读取。如何防止这种情况发生?

我决定阅读源代码,发现
request.post()
用于
应用程序/x-www-form-urlencoded
多部分/表单数据
,这就是为什么它总是试图将给定数据解析为文本。我还发现我应该使用
request.multipart()

@routes.post(“/v1/something”)
异步def v1_某物(请求):
obj in异步(等待请求.多部分()):
#obj是aiohttp.multipart.BodyPartReader的一个实例
如果obj.filename不是None:#传递非文件
file=BytesIO(等待obj.read())
...