根本原因是客户端fetch默认超时(chrome 30秒)低于大文件上传所需时间(90~180秒),解决方案有三:一是用abortcontroller为fetch显式设180秒超时;二是改用xmlhttprequest并设置timeout属性;三是nginx代理层同步调整proxy_connect/send/read_timeout等参数至180秒。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

阶跃AI智能办公平台在上传大文件时频繁触发网络超时,导致上传中断、进度归零或直接报错504/408,根本原因在于客户端默认连接等待时间远低于大文件传输所需的实际耗时。
确认当前超时值并定位问题源头
打开浏览器开发者工具(F12)→ 切换到 Network 标签页 → 上传一个 50MB 以上的文件 → 找到对应 POST 请求 → 查看 Timing 选项卡中的 “Waiting (TTFB)” 时间。若该值接近或超过 30 秒,说明服务端响应延迟已触达前端默认阈值。
这一步不能跳过:阶跃AI前端 SDK 默认使用 fetch 发起请求,其底层未显式设置 【timeout】 参数,完全依赖浏览器自身实现(Chrome 通常为 30 秒,Firefox 约 60 秒),而实际上传 ZIP 或 PDF 类大文件常需 90~180 秒。
方法一:前端代码中显式配置 fetch 超时
在调用阶跃AI上传接口的 JS 文件中,将原始 fetch 封装改为带 AbortController 的可控请求:
const controller = new AbortController();
setTimeout(() => controller.abort(), 180000); // 设为 180 秒
fetch('/api/v1/upload', {
method: 'POST',
body: formData,
signal: controller.signal
})
注意:必须传入 signal,否则 timeout 不生效;且不能与 axios 混用——axios 的 timeout 是 xhr 层级,对 fetch 封装无效。
方法二:改用 XMLHttpRequest 手动控制超时
XMLHttpRequest 对 timeout 属性支持更稳定,尤其在旧版 Electron 或内嵌 WebView 场景下表现更好:
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api/v1/upload');
xhr.timeout = 180000;
xhr.upload.onprogress = (e) => { /* 更新进度条 */ };
xhr.send(formData);
这一步操作起来很简单,直接把文件拖进去就行。但要注意:若后端返回非 JSON 响应体(如纯文本或重定向),需手动解析 xhr.responseText,不能依赖 .json() 方法。
方法三:通过代理层统一延长超时(适用于企业部署)
若你使用 Nginx 作为阶跃AI前端反向代理,需同步调整三处超时参数,缺一不可:
① 在 location /api/v1/upload { } 块中添加:
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;
② 同时确保 client_header_timeout 和 client_body_timeout ≥ 180,否则请求头或请求体未完整送达即被切断;
③ 若启用了 keepalive,需验证 upstream server 的 idle timeout 是否 ≥ 180 —— 否则连接池中的长连接会在中途被上游主动关闭,造成 upload 进程突然终止。
执行 nginx -t && nginx -s reload 生效后,无需修改任何前端代码即可全局生效。











