POST /api/project/export| 字段 | 必填 | 说明 |
|---|---|---|
Authorization | 是 | 认证 Token,格式:Bearer <token> 或直接 <token> |
{
"page": 1,
"pageSize": 100,
"filters": { /* 项目筛选条件 */ }
}{
"message": "项目数:50,填入模板成功",
"output": "/var/www/exports/projects_20240520.xlsx",
"filename": "projects_20240520.xlsx",
"downloadUrl": "https://api.example.com/exports/projects_20240520.xlsx?download=1&filename=projects_20240520.xlsx"
}| 字段 | 类型 | 说明 |
|---|---|---|
message | string | 导出结果描述 |
output | string | 文件在服务器上的绝对路径(仅调试用,前端无需处理) |
filename | string | 生成的文件名(用于前端显示) |
downloadUrl | string | 前端直接使用此 URL 触发文件下载(已配置 Nginx 强制下载) |
{
"error": "系统繁忙,请稍后再试",
"retryAfter": 15000
}| 字段 | 类型 | 说明 |
|---|---|---|
retryAfter | number | 剩余等待时间(毫秒),建议前端显示倒计时 |
// 401 未授权
{ "error": "缺少 Authorization 头" }
// 500 服务器错误
{ "error": "导出过程中发生错误:<具体错误信息>" }| 场景 | 系统行为 |
|---|---|
| 导出开始 | 设置全局锁 isExporting=true,记录开始时间 |
| 导出完成/失败 | 通过 on-finished 自动解锁,触发 GC(内存回收) |
| 并发请求 | 返回 HTTP 423 和剩余等待时间,前端轮询 /export/status 或显示倒计时 |
downloadUrl,不要拼接路径(避免跨域或路径错误)。<a href="downloadUrl">下载</a>。Authorization 头。output 字段仅用于后端日志,前端无需解析。