CodeGeex可生成基于Flask后端与JavaScript前端的分片上传代码:后端接收file_id、chunk_index、total_chunks及分片数据,按序保存并合并;前端用File API切片、Promise.allSettled并发控制上传,配合/init获取ID、/merge_status轮询状态、/download触发下载。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

需要在网页端上传几个GB的视频文件,但直接传会超时失败,必须用分片上传机制绕过HTTP超时和内存限制,CodeGeex能根据自然语言描述直接生成可运行的前后端分片上传代码。
后端:用 Flask 实现分片接收与合并逻辑
第一步:创建 Flask 应用并启用文件上传支持,安装依赖 pip install flask werkzeug
第二步:在 app.py 中定义 /upload 接口,接收三个关键参数:file_id(唯一标识本次上传)、chunk_index(当前分片序号)、total_chunks(总分片数)→ 用 request.form 获取;同时用 request.files['chunk'] 获取二进制分片数据
第三步:将每个分片按 file_id + chunk_index 命名,保存到 ./uploads/chunks/ 目录下,确保目录存在且有写权限 → 这一步不做校验会导致后续合并失败
第四步:当收到最后一个分片(chunk_index == total_chunks - 1)时,触发合并逻辑:遍历所有该 file_id 的分片文件,按序号升序读取→拼接写入 ./uploads/merged/{file_id},完成后删除所有分片文件 → 【必须按 chunk_index 数值排序,不能用 os.listdir() 默认顺序,否则视频会花屏】
第五步:返回 JSON {“status”: “success”, “file_id”: “xxx”},前端凭此 file_id 后续发起合并完成确认或下载请求
前端:用 JavaScript 实现文件切片与并发控制
方法一:原生 File API 切片上传
监听 input[type="file"] 的 change 事件,获取 File 对象 → 调用 slice(start, end) 方法按 5MB 每片切割(过大易失败,过小增加请求数)
对每个 Blob 分片构造 FormData,append('chunk', blob)、append('file_id', uuidv4())、append('chunk_index', i)、append('total_chunks', chunks.length) → 注意不要漏传 total_chunks,否则后端无法判断是否收齐
CodeGeeX 2.21.0是智谱AI推出的AI编程助手版本,对Inline Chat功能进行了重大优化,包括UI设计升级、支持流式输出以提升响应速度,并新增“查看思路”按钮以便理解代码原理。同时,该版本在编辑器中新增CodeLens控件,支持一键“解释”代码或“添加注释”。目前该工具对个人开发者免费开放。
用 Promise.allSettled() 控制最多同时上传 3 个分片,避免浏览器连接数打满或服务端拒绝 → 这一步操作起来很简单,直接把文件拖进去就行。
方法二:使用 axios 封装上传函数
定义 uploadChunk(chunk, index, total, fileId) 函数,内部用 axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) → 必须显式设置 headers,否则 Flask 无法解析 multipart 数据
在 then 回调中检查响应 status 是否为 success,失败时重试最多 2 次 → 【重试需携带相同 chunk_index,否则后端会存重复分片】
前后端联调关键验证点
上传前先调用 /init 接口获取唯一 file_id,而不是前端自己生成 → 避免多个用户撞 ID 导致分片混杂
上传全部分片后,前端轮询 /merge_status?file_id=xxx,直到返回 merged:true → 不要直接跳转下载,必须等合并完成
合并后的文件名需从原始文件名推导(如 video.mp4 → video_abc123.mp4),保留扩展名 → 否则前端无法正确识别 MIME 类型触发下载
最后一步:访问 /download?file_id=xxx,后端以 send_file() 返回合并后文件,设置 as_attachment=True → 浏览器自动触发下载














