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

如何在HTML表单中传入JSON文件并以表格展示内容(Python Flask)

解决Flask读取上传JSON文件失败的问题

问题根源

  • 文件指针偏移:调用jf.save()后,文件对象的指针会移动到文件末尾,此时再执行json.load(jf)会因无内容可读报错。
  • 路由冲突:两个@app.route('/')定义会导致Flask仅识别最后一个路由,原index路由会被覆盖。
  • 上传路径无效:app.config["FILE_UPLOAD"]设为空字符串,保存文件时可能出现路径错误,需指定有效目录。

修正后的代码

from flask import Flask, render_template, request, jsonify
import os
import json

app = Flask(__name__)
# 设置上传目录,自动创建不存在的目录
app.config["FILE_UPLOAD"] = "uploads"
os.makedirs(app.config["FILE_UPLOAD"], exist_ok=True)

@app.route('/', methods=['GET', 'POST'])
def handle_request():
    if request.method == 'GET':
        return render_template("form.html")
    elif request.method == 'POST':
        jf = request.files["file"]
        
        # 方案1:先读取内容,重置指针后保存
        jdata = json.load(jf)
        jf.seek(0)  # 将文件指针重置到开头
        jf.save(os.path.join(app.config["FILE_UPLOAD"], jf.filename))
        
        # 方案2:先保存文件,再重新打开读取(更适合大文件)
        # save_path = os.path.join(app.config["FILE_UPLOAD"], jf.filename)
        # jf.save(save_path)
        # with open(save_path, 'r') as f:
        #     jdata = json.load(f)
        
        print("file uploaded")
        return jsonify(jdata)

if __name__ == "__main__":
    app.run(debug=True)

关键修改说明

  • 合并路由:将GET(渲染表单)和POST(处理上传)逻辑合并到同一个路由,避免冲突。
  • 调整读写顺序:
    • 方案1先读取JSON内容,再重置指针保存文件,适合小文件场景。
    • 方案2先保存文件到本地,再重新打开读取,稳定性更高,适配大文件。
  • 确保目录存在:用os.makedirs(..., exist_ok=True)自动创建上传目录,避免路径不存在的异常。

内容的提问来源于stack exchange,提问作者Arshdeep Singh Bhatia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:20:27