如何使用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
相关产品推荐
相关产品推荐

