Python aiohttp服务器文件上载:request.post UnicodeDecodeError
我在Flask中有一个web服务,它处理上传的二进制数据: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
@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())
...