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

如何使用Flask-RESTPlus实现多文件POST上传?

我来帮你解决这个Flask-RESTPlus多文件上传的问题!你遇到的问题其实是几个小细节没处理对,咱们一步步来修正:

1. 修正parse_args()的拼写错误

你代码里写的是upload_parser.parser_args(),这里多了个冗余的r,正确的方法名是parse_args()——这个拼写错误会导致参数根本没被正确解析,所以files才会返回None。

2. 确认参数配置与前端传参逻辑

你的参数配置方向是对的,但要确保前端(包括Swagger UI)上传文件时,每个文件的表单字段名都设为files:action="append"的作用就是把所有同名的文件参数收集成一个数组,如果字段名不统一,后端就无法识别为数组。

修正后的完整代码

from flask_restplus import Namespace, Resource, reqparse
from werkzeug.datastructures import FileStorage

file_upload = Namespace(name="files")
upload_parser = reqparse.RequestParser(bundle_errors=True)
upload_parser.add_argument(
    name="files",
    type=FileStorage,
    location="files",
    action="append",
    required=True,  # 可选,如果你要求必须上传至少一个文件
    help="请上传一个或多个文件"
)

@file_upload.route("/")
class Files(Resource):
    @file_upload.expect(upload_parser)
    def post(self):
        args = upload_parser.parse_args()  # 修正方法名拼写
        files = args.get("files")  # 用get方法更安全,避免KeyError
        
        if not files:
            return {"message": "未上传任何文件"}, 400
            
        # 遍历文件列表做自定义处理
        for file in files:
            print(f"收到文件: {file.filename}")
            # 示例:保存文件到本地
            # file.save(f"./uploads/{file.filename}")
        
        return {"message": f"成功上传{len(files)}个文件"}, 200

Swagger UI的正确操作方式

在Swagger界面点击「Try it out」后,找到files参数的输入框,点击「Add item」添加多个文件选择框,每个选择框都对应files字段,选择好多个文件后提交,后端就能正确接收到文件数组了。

自定义前端表单的注意事项

如果是自己写前端表单,要确保表单设置了enctype="multipart/form-data",并且文件输入框的name="files"且开启多文件选择:

<form method="POST" enctype="multipart/form-data" action="/files/">
  <input type="file" name="files" multiple>
  <button type="submit">上传文件</button>
</form>

这样调整后,多文件上传功能应该就能正常工作了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:59:48