Tornado服务端使用get_body_argument无法获取form-data上传文件内容如何解决
问题根源
从你输出的请求体可以看到,你上传的第一个表单字段的name属性为dev1\n,比你调用get_body_argument时传入的参数名dev1多了一个换行符,Tornado匹配表单参数名时要求严格相等,自然无法找到对应的返回值。
另外你用了multipart/form-data传文件,get_body_argument方法本身只用于获取普通文本类型的表单字段,上传的文件默认会被解析到self.request.files属性中,不会被get_body_argument识别。
解决步骤
- 第一步:修正Postman的表单配置,检查
dev1字段名,删除末尾多余的换行/空白字符,确保字段名完全为dev1 - 第二步:使用正确的Tornado文件读取方法,示例代码如下:
# 取dev1对应的第一个上传文件对象 dev1_file = self.request.files.get("dev1", [None])[0] if dev1_file: # 读取文件内容并解码为字符串 test1_content = dev1_file["body"].decode("utf-8") # 此处即可获得你要的test1.txt内容:xxxxx\nyyyyy print(test1_content)
- 如果你不需要走文件上传的逻辑,只是要传文本内容,可以在Postman中将
dev1字段的类型从File改为Text,直接填写内容,此时即可直接通过get_body_argument("dev1")获取对应值。
内容的提问来源于stack exchange,提问作者krishna
相关产品推荐
相关产品推荐

