downloadUrl? 公网或专线打通、能拿到 HTTP 200、返回真实文件而不是 HTML 错误页。ext 字段是否准确? Content-Type / Content-Disposition 任一存在并正确即可,缺失时必须用元信息中的 ext(不带点)兜底。fileId 是否换了? 复用旧 fileId 会命中旧预览缓存。浏览器 iframe
│ 1) 加载 iframe(带签名 / 用户身份)
▼
石墨预览服务
│ 2) 调元信息回调 → 接入方返回 downloadUrl、ext、permissions
│ 3) 用 downloadUrl 下载源文件
│ 4) 解析、转换、生成预览资源(含 blob: 资源)
▼
浏览器渲染| 环节 | 典型失败信号 |
|---|---|
| 1 加载 iframe | 页面空白、控制台跨域 / 401 / 403 |
| 2 元信息回调 | 控制台或服务端日志报 401 / 5xx,预览任务直接失败 |
| 3 下载源文件 | 错误码 90035、预览任务失败 |
| 4 解析与渲染 | 错误码 90033(不支持类型)、90042(带密码)、90050/90052/120509(过大)等 |
| 错误码 | 含义 | 主要排查方向 |
|---|---|---|
| 90033 | 不支持的预览类型 | 文件真实格式、元信息 ext 字段、响应头是否被改写 |
| 90035 | 下载失败 | downloadUrl 可达性、鉴权、HTTP 状态码、是否被重定向到登录页 |
| 90042 | 文件带密码 | 先在业务系统侧解密,或提示用户上传未加密版本 |
| 90050 / 90052 / 120509 | 文件过大 | 提示用户拆分文件,或在业务系统侧做大小限制 |
| 120016 | 文件不支持导入 | 对照支持格式,先转码为 PDF / docx 再走预览 |
| 120502 / 120507 | 单元格 / 内容超限 | 拆分表格、清理多余空白单元格 |
完整错误码及解决方案见 文件预览或导入报错如何处理。
type、downloadUrl、ext、permissions.readable 是否齐全{
"id": "ba13551165cc5066",
"name": "示例文档.docx",
"type": "file",
"permissions": { "readable": true },
"downloadUrl": "https://example.com/download/test.docx",
"ext": "docx"
}permissions 必须返回,否则预览会因权限校验失败而中断。302 跳转到登录页是最常见的隐性失败 —— 表面是重定向,最终拿到的是 HTML。Content-Length 与真实文件大小是否一致。Content-Type 是文件类型(如 application/vnd.openxmlformats-officedocument.wordprocessingml.document)而不是 text/html。Content-Type 或 Content-Disposition,必须在元信息回调里用 ext 字段兜底:{ "ext": "docx" } // 正确:不带点
{ "ext": ".docx" } // 错误:带点会识别失败ext 字段是否在支持范围内:doc / docx / xls / xlsx / ppt / pptx / pdf / txt / md / jpg / png / gif / svg / ofd。ext 是否一致 —— 用 file 命令验证:90042,看上去也像"格式不支持")。fileId 复用导致命中了旧的预览缓存。fileId。fileId,例如 {businessId}-{sha1(content).slice(0,8)}。这样既能定位回业务对象,又能让石墨在内容变更时识别为新文件。downloadUrl 是否还指向旧文件(对象存储覆盖写时 URL 不变,但内容变了,依旧会命中缓存)。downloadUrl 的下载结果。blob: 资源,很多容器默认屏蔽。blob: scheme。dataDetectorTypes,允许 blob: scheme。blob: 加入白名单。Content-Type / Content-Disposition / ext 准确 —— 头信息缺失会让 SDK 退回到 blob 缓存,间接放大不兼容问题。downloadUrl 的下载响应。| 字段 | 说明 | 易错点 |
|---|---|---|
id | 文件在业务系统中的 ID | 内容变化时建议换 ID,避免命中旧缓存 |
type | 固定填 file | 误填为 doc 等其他值会触发协同文档分支 |
permissions.readable | 当前用户是否可读 | 2021-12-01 后强制必填 |
downloadUrl | 公网可达的下载地址 | 不能依赖 Cookie / SSO,签名 URL 有效期足够长 |
ext | 文件扩展名 | 不带点,仅在响应头无法识别时兜底,但强烈建议总是返回 |
HTTP/1.1 200 OK
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
Content-Disposition: attachment; filename="示例文档.docx"
Content-Length: 24631Content-Type 和 Content-Disposition 任一存在且正确即可;都不准确时由元信息中的 ext 兜底。完整 Header 要求见 石墨官方文档。fileId、用户 ID、问题发生时间downloadUrl 发起 curl -I 的结果(状态码 + 响应头)file --mime-type 输出)