Flask API如何通过Curl同时传递JSON文件与source、id参数?
正确的Curl命令与Flask数据读取实现
正确的Curl命令
你之前的Curl命令存在几个问题:-F参数的文件引用缺少@符号、使用了中文引号、请求地址未指定对应的Flask路由/json_test。修正后的命令如下:
curl -i -X POST -F "data=@/Users/test/testjson.json" -F "source=Value1" -F "ident=Value2" http://127.0.0.1:5000/json_test
注:无需手动指定
Content-Type: multipart/form-data,curl会自动生成正确的multipart请求头。
对应的Flask代码实现
需要修改原有的Flask接口,适配multipart/form-data类型的请求,分别读取上传的JSON文件和表单参数:
from flask import Flask, request, json app = Flask(__name__) @app.route('/json_test', methods=['POST']) def process_data(): # 获取上传的JSON文件 json_file = request.files.get('data') if not json_file: return "缺少JSON文件", 400 # 读取并解析JSON内容 try: data = json.load(json_file) except json.JSONDecodeError: return "JSON格式无效", 400 # 获取source和ident参数 source = request.form.get('source') ident = request.form.get('ident') # 此处添加你的业务逻辑,示例为打印接收的数据 print("JSON数据:", data) print("Source参数:", source) print("Ident参数:", ident) return "数据接收成功", 200 if __name__ == '__main__': app.run(debug=True)
关键说明
- 用
request.files.get('data')获取上传的文件对象,对应Curl命令中data=的字段名; - 直接使用
json.load(json_file)解析文件流,无需额外读取字节再转JSON; - 普通表单参数通过
request.form.get()获取,对应Curl中source=和ident=的字段。
内容的提问来源于stack exchange,提问作者safar cafe
相关产品推荐
相关产品推荐

