本文档由 石墨办公 提供。
排查前可以采集"事发任务"的如下关键字段: taskId、fileId、目标type、源文件大小 / URL、status、message、最近一次progress、首次创建时间等,以方便后续问题定位。
status != 0/v2/import 或 /export/{fileId},HTTP 200,但响应 status 不是 0,data 是 null。type 不在支持列表里)、签名 / token 失效、fileId 已存在且关联了别的协同文件、源文件无法访问。message:石墨在这里通常会给出可读的原因。type 是否在指南的"导入 / 导出支持格式表"内。X-Weboffice-Signature 与 X-Weboffice-Token 是否仍在有效期内,时钟是否同步。curl -I "${fileUrl}" 验证石墨能否拉到源文件。message 处理对应一项,并在业务库里把这条记录直接打 failed,不要进入轮询。重试前换一个新的 fileId,不要复用。fileId 冲突status != 0,message 提示文件已存在或类型不匹配。fileId 已经关联到某个石墨协同文件(可能是上次半成功的导入,也可能被另外的业务流程用过)。石墨不支持对已存在的 fileId 做覆盖式导入。fileId,看它是不是上一次失败任务残留的 importing 记录。importing:标记为 abandoned,重新生成 fileId 再发起导入。fileId 用 UUID / Snowflake 这类全局唯一方案;不要把"原始文件名"或"用户 ID + 时间戳秒级"作为 fileId。fileUrl 拉取失败status != 0,message 指向下载错误;或任务接受了但轮询很快变成失败。fileUrl:内网地址、未签名的对象存储私链、CDN 防盗链拦截、源文件已被删除等。curl -I "${fileUrl}" 模拟石墨服务端拉取,看 HTTP 状态码。status != 0。石墨文档明确写了"不支持导入 0kb 文件"。fileUrl 之前先校验文件大小 > 0;前端展示"文件为空"提示,不要把空文件传到石墨。status != 0,message 提示文件类型不支持。.rtf 走 document 通道、把 .numbers 走 spreadsheet 通道。status: 0 就当成功/v2/import 与 /export/{fileId} 是任务创建接口,status: 0 只代表"任务被石墨接收",文件还在转换中。progress == 100 才算业务上的成功。前端展示一定要分"导入中 / 导入成功"两态,不要合并。fileId,看到空文档或编辑器报"文件不存在 / 权限错误"。fileId 在石墨侧还没有内容;如果您的应用前端立刻打开它,编辑器要么拿到空内容、要么连协同会话都建不起来。importing → 轮询完成 → ready"切换状态,前端只在 ready 才允许进入编辑器;中间态展示"导入中"占位页。