You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tornado框架如何获取POST请求multipart/form-data格式上传的附件

Tornado multipart/form-data 文件上传获取失败解决方案

问题原因

RequestHandler.get_argument、RequestHandler.get_body_argument 仅支持获取表单中的普通文本字段,无法读取上传的二进制文件内容。Tornado 会将所有 multipart/form-data 格式请求中的上传文件,独立存储在 self.request.files 属性中,不会和普通参数混合解析。

正确实现代码

from tornado.web import RequestHandler

class CustomHandler(RequestHandler):
    def post(self):
        # 普通参数获取方式不变,和之前写法一致
        dic = {}
        dic['operation'] = self.get_argument("operation")

        # 获取上传文件,替换为你Postman中文件字段对应的key值
        # 示例假设Postman里文件字段的key为"upload_file"
        uploaded_files = self.request.files.get("upload_file", [])
        if not uploaded_files:
            self.write({"code": 1, "msg": "未检测到上传文件"})
            return
        
        # 单个字段上传多文件时会返回多个元素,取第一个文件为例
        target_file = uploaded_files[0]
        # 获取文件信息
        file_name = target_file["filename"] # 原始文件名
        file_binary = target_file["body"] # 文件二进制内容,可直接写入本地存储
        file_mime = target_file["content_type"] # 文件的MIME类型

        # 后续业务逻辑,比如保存文件
        with open(f"./save_path/{file_name}", "wb") as f:
            f.write(file_binary)
        
        self.write({"code": 0, "msg": f"文件{file_name}上传成功"})

常见问题排查

  • 确认Postman中文件字段的key名称和代码中self.request.files.get()的入参完全一致,避免拼写错误、多余空格
  • 确认请求头Content-Type确实为multipart/form-data,Postman选form-data格式时会自动携带该请求头,不需要手动设置
  • 若使用反向代理服务(如Nginx),确认代理配置未限制上传文件大小、未篡改multipart格式的请求体
  • 确认Tornado版本≥4.0,旧版本Tornado对multipart请求的解析逻辑存在兼容性问题

内容的提问来源于stack exchange,提问作者kittu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:36:04