1. 03. 文件预览
石墨文档中台-开发文档
  • 1. 适用范围
  • 00. 概述
    • 石墨文档中台能做什么?
    • 三种典型的业务接入场景
    • 石墨文档中台支持哪些格式?
  • 01. 快速开始
    • 基本概念
    • 场景一:10 分钟创建预览文件
    • 场景二:10 分钟创建协同编辑文件
  • 02. 鉴权与安全
    • 整体概述
    • 签名凭证 Token
    • 签名凭证 Signature
  • 03. 文件预览
    • 整体概述
    • 如何预热预览缓存
    • 如何防盗链
    • 常见问题处理
  • 04. 文件编辑
    • 整体概述
    • 协同文档权限设计
    • 协同文件保存与更新机制
    • 协同文件复制与删除
  • 05. 文件导入导出
    • 整体概述
    • 常见问题处理
  • 06. 石墨前端 API
    • 整体概述
    • 公共 API
      • 公共处理方法
      • 顶部栏定制 HeaderBars
    • 编辑器 API
      • 轻文档
      • 传统文档
      • 表格
      • 幻灯片
      • 表单
      • 应用表格
  • 07. 石墨后端 API
    • 整体概述
    • 错误码说明
    • 文件-预览 API
      • 访问预览文件
      • 创建文件预览缓存
    • 文件-协同编辑文件管理 API
      • 访问协同编辑文件
      • 创建协同文件
      • 创建协同文件副本
      • 删除协同文件
    • 文件-导入导出 API
      • 文件导入
        • 文件导入说明
        • 创建导入任务
        • 获取导入进度
        • 创建导入任务(旧版)
        • 获取导入进度(旧版)
      • 文件导出
        • 文件导出流程
        • 创建导出任务
        • 获取导出进度
    • 文件-表格文件(Excel) API
      • 表格接口参数说明
      • 获取表格内容
      • 获取表格中的评论数
      • 更新表格内容
      • 追加表格内容
      • 删除表格行
      • 新增表格工作表
    • 文件-文稿文件(Word) API
      • 文稿书签说明
      • 读取文稿书签内容
      • 替换文稿书签内容
    • 文件-文档文件(类 Markdown) API
      • 获取文档中的评论列表
    • 文件-应用表格文件(多维表格)API
      • 应用表格列及单元格值结构
      • 应用表格接口调用规则
      • 获取数据表列表
      • 创建数据表
      • 获取字段列表
      • 创建字段
      • 更新字段
      • 删除字段
      • 新增行
      • 获取单行
      • 更新行
      • 删除行
    • 文件-获取额外信息 API
      • 获取文件的纯文本内容
      • 文件纯文本字数统计
      • 获取文件的历史列表
      • 获取文件的版本列表
      • 获取文件内容中所有的 @ 人信息列表
      • 还原文件历史版本
    • 系统管理 API
      • 应用管理
        • 获取应用详情
        • 更新应用回调地址
      • 用户席位管理
        • 用户席位状态说明
        • 获取用户列表和席位状态
        • 激活用户席位​
        • 取消用户席位​
        • 批量设置用户席位
    • 其他 API
      • 上报事件
      • 创建行为历史
      • 推送文件内全部的用户
      • 推送用户全部的 websocket 连接
    • 获取行列表
  • 08. 回调接口(你的应用需实现的接口)
    • 整体概述
    • 文件信息
      • 文件权限说明
      • [重要] 获取文件元信息-协同文档
      • [重要] 获取文件元信息-预览文档
      • 获取当前用户的文件列表
      • 获取文件的协作者列表
      • 获取接入方指定文件的完整访问地址
      • 获取文件元信息-协同文档自动任务(admin)
      • 根据指定用户获取文件元信息-协同文档(admin)
    • 用户信息
      • 批量获取用户信息(admin)
      • [重要] 获取当前用户信息
      • 获取当前用户所在团队信息
      • 获取指定用户信息
      • 获取用户水印信息
      • 获取用户部门路径
      • 批量获取用户信息
    • 团队和部门
      • 特殊部门 ID 说明
      • 获取团队下的成员列表
      • 获取部门信息
      • 获取部门的下级部门节点
      • 获取部门下的成员分页列表
    • 搜索功能
      • 获取与文件相关的用户列表
      • 获取与文件相关的文件列表
      • 按关键字搜索文件和用户列表
    • 事件推送
      • 整体概述
      • 评论(Comment)
        • 轻文档
          • 添加评论
          • 删除评论
          • 结束评论
          • 对于评论的回复评论
        • 表格
          • 添加评论
          • 删除评论
          • 结束评论
          • 对于评论的回复评论
        • 传统文档
          • 对于评论的回复评论
          • 添加评论
          • 更新评论
          • 删除评论
        • 幻灯片
          • 添加评论
          • 删除评论
          • 结束评论
          • 对于评论的回复评论
        • 应用表格
          • 添加评论
          • 对于评论的回复评论
          • 删除评论
      • 讨论(Discussion)
        • 轻文档
          • 发送讨论消息
      • 提及(MentionAt @ 人)
        • 轻文档
          • 在评论中 at
          • 在讨论中 at
          • 在正文中 at
        • 表格
          • 在评论中 at
          • 在正文中 at
        • 传统文档
          • 在评论中 at
          • 在正文中 at
        • 应用表格
          • 在评论中 at
          • 在正文中 at
      • 日期提醒 (DateMention)
        • 轻文档
          • 创建
          • 修改
          • 删除
        • 表格
          • 创建
          • 修改
          • 删除
        • 传统文档
          • 创建
          • 修改
          • 删除
      • 文件内容更新 (FileContent)
        • 文件内容更新
      • 文档协作者协同状态变化 (Collaborator)
        • 文档协作者协同状态变化
      • 文件版本 (Revision)
        • 版本
      • 系统事件 (System)
        • 系统事件
      • 回调请求错误(实验性)
        • 回调请求错误
  • 09. 核心模型
    • 你的应用如何设计应用(app)模型?
    • 你的应用如何设计文件数据模型?
    • 你的应用如何设计通讯录模型?
    • 你的应用系统如何设计文件权限模型?
  • 10. 典型场景方案
    • 云盘场景
    • IM 场景
    • 示例代码仓库
  • 11. 常见问题
    • 访问接口提示 Signature
    • 文件预览或导入报错
    • 首次接入 SDK 报错
    • 文档预览如何做防盗链
    • 复制粘贴、全屏操作不正常
    • 如何实现文档模板功能
    • 文档内容何时保存
    • 移动端不支持 blob 协议导致预览失败
    • 如何实现文件重命名
    • 如何通过接口修改文档内容
    • @人员时如何直接跳转至对应锚点
  1. 03. 文件预览

如何预热预览缓存

你的应用可以在用于在用户打开预览之前请求石墨文档中台的POST /sdk/v2/api/cloud-files/{fileId}/create 接口来实现缓存预热,先让石墨服务端把源文件下载、解析、转换好。用户真正打开 iframe 时直接命中缓存,跳过"首次等待"时间,提升用户体验。
它是同步接口:请求会一直等到预览任务创建完成(成功或失败),石墨文档中台返回的响应里会返回结果。所以适合做后台预热,不适合放在用户的关键路径上同步等待。
适用范围:普通 Office 文件预览(只读)。不会把文件转成可编辑的协同文档;如果需要可编辑文档,请走 创建协同文档 接口。

一、什么时候应该调用#

场景是否推荐预热
上传完成后,预计用户很快会打开推荐:上传成功后立即在业务后端异步触发
大文件 / 复杂 PPT / 多 Sheet Excel强烈推荐:首次解析可能数秒到数十秒
批量导入历史文件推荐:低峰期批量预热高频文件
用户极少打开的冷数据不推荐:浪费资源,按需走懒加载即可
文件还可能频繁覆盖更新不推荐:见下文"缓存失效",先确定版本策略再预热
两条工作流的对比(完整时序图见官方文档):
方案 A:用户直接访问(首次慢)
方案 B:服务端预热(推荐)

二、调用前的前置条件#

预热调用本身只是触发器,真正能不能成功取决于接入方的几个回调和文件本身。开调用之前请按下面这张清单逐项核对:
GET {endpoint_url}/users/current/info 可用,石墨能用 X-Shimo-Token 识别当前用户
GET {endpoint_url}/files/{fileId} 返回的 type 是 file(普通文件,不是协同文档)
元信息返回的 permissions.readable 为 true
元信息返回了完整的 downloadUrl 和 不带点的 ext(如 docx)
石墨服务端能访问 downloadUrl,下载到的不是 0KB、不是 HTML 错误页
任何一条不满足,预热都会直接报错。downloadUrl 怎么设计、怎么避开防盗链坑,见 下载地址与防盗链设计指南。

三、请求与响应#

请求形态非常简单 —— fileId 放在路径里,请求体为空:
成功响应(code 和 message 都是空字符串):
{
  "code": "",
  "message": ""
}
失败响应(code 非空 + 可读的 message):
{
  "code": "90042",
  "message": "文件格式不正确"
}
注意:HTTP 状态码是 200 不代表预热成功,必须看响应体里的 code 是不是空字符串。

四、缓存命中与失效#

这是预热接入里最容易踩坑的地方。
核心心智:石墨的预览缓存是按 fileId 维度建立的。一旦同一个 fileId 完成了首次预览(无论是用户触发还是预热触发),后续即使接入方在元信息回调里返回了新的 downloadUrl、指向新的文件内容,预览结果也不会更新 —— 石墨直接返回旧缓存。
所以:
文件内容变化 → 必须换 fileId。这是唯一可靠的方式。
推荐用 业务文件ID-版本号 或 业务文件ID-内容哈希 作为预览用的 fileId:
预览 fileId = file_38291          # 错:覆盖写时缓存命中旧内容
预览 fileId = file_38291-v3       # 对:每次内容变化版本号 +1
预览 fileId = file_38291-a8c7f2   # 对:用内容 SHA1 前缀
业务侧维护"业务 fileId → 当前预览 fileId"的映射,旧的预览 fileId 可以异步清理,新的走一次预热。

五、失败处理#

预热失败不要阻断业务上传流程:用户上传完成的反馈应该独立于预热结果。预热失败时按下面这套来处理:
1.
把 code、message、fileId、文件扩展名、文件大小、downloadUrl 的服务端可达性结果一起写日志,方便后续定位。
2.
根据错误码决定是否重试:
90035(下载失败)通常是 downloadUrl 临时不可达,可以隔几分钟重试一次,最多 2~3 次。
90033(不支持的预览类型)、90042(文件带密码)、120016(不支持导入)这类错误重试也没用,记录后跳过。
90050 / 90052 / 120509(文件过大)/120502 / 120507(单元格超限)属于文件本身的问题,提示业务侧或用户。
3.
即使预热失败,用户后续打开预览时仍会走懒加载方案 A,会看到"等待中 → 失败原因",体验降级而非完全不可用。
完整错误码及对应排查方向见 文件预览失败排查指南。

六、与相关接口的关系#

接口作用文档
POST .../cloud-files/{fileId}/create预热缓存(本文)本文
GET .../cloud-files/{fileID}/page用户访问预览的 iframe 入口访问预览文件
GET {endpoint_url}/files/{fileId}接入方实现的元信息回调获取文件元信息-预览文档
GET {endpoint_url}/users/current/info接入方实现的当前用户回调见 SDK 接入文档

七、小结#

一句话总结:上传完成后异步预热、按版本号管理 fileId、失败只记日志不阻塞业务,就能在不增加用户感知延迟的前提下覆盖绝大多数预览场景。
容易踩坑的就两个:缓存按 fileId 维度建立、文件内容变化必须换 fileId;下载链路必须对石墨服务端可达(详见防盗链设计指南)。这两条做对,预热接入基本不会出问题。
修改于 2026-06-22 02:43:30
上一页
整体概述
下一页
如何防盗链
Built with