1. 05. 文件导入导出
石墨文档中台-开发文档
  • 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. 05. 文件导入导出

整体概述

导入用于把外部 Office 文件转换成石墨协同文件;导出用于把石墨协同文件输出为 docx / xlsx / pdf 等格式。两者都是异步任务:接口请求成功只代表任务已经被石墨接收,实际成败必须靠轮询进度接口。本文按"先理解任务模型、再画完整流程、最后讲异常和迁移"的顺序,把这套接口讲清楚。

一、整体架构#

导入和导出有三个共同特征:
异步任务模型。创建任务的接口立刻返回 taskId,业务侧拿着 taskId 轮询进度接口直到 progress == 100(或 status != 0 失败)。
格式有强约束。每种石墨文件类型 (document / documentPro / spreadsheet / presentation / table) 都有自己支持的导入 / 导出格式表,进去之前先对照表确认。
超时是硬上限。任务最长执行时间 10 分钟、导出下载链接有效期 5 分钟、进度长时间不变(≥30 分钟)视为失败。这三条线决定了你的轮询和重试策略。
业务库写入与石墨接口调用要按顺序编排:业务侧先建任务记录,再调石墨,最后落终态。
失败时保留任务上下文(taskId、源文件、目标类型、错误码),便于排查和重试。

二、导入文件#

2.1 接口定义#

POST /sdk/v2/api/files/v2/import
Header:        X-Shimo-Signature, X-Shimo-Token
Content-Type:  multipart/form-data
Body fields:
  fileId         必填  你的应用文件唯一 ID
  type           必填  目标石墨文件类型
  fileUrl        必填  源文件下载地址(石墨服务端可访问)
  fileName       必填  文件名
  importFontType 否    1 = 把"等线"字体转为默认字体
成功响应:
{ "status": 0, "message": "", "data": { "taskId": "..." } }
status != 0 表示创建失败,按 message 排查。
导入支持的格式:
石墨文件类型支持导入
document.docx, .doc, .md, .txt
documentPro.docx, .doc, .wps
spreadsheet.xlsx, .xls, .csv, .xlsm
presentation.pptx, .ppt
注意点:
不支持 0kb 文件。请求前业务侧先校验 fileUrl 的内容长度。
fileUrl 必须公网或同网络可达。石墨服务端要去拉取,不可达就直接失败。
fileId 不可复用。同一个 fileId 不能被两次导入覆盖;要重新导入,请用新的 fileId。

2.2 查询进度#

POST /sdk/v2/api/files/v2/import/progress
Body: { "taskId": "<上一步返回的 taskId>" }
响应字段:
字段含义
status任务状态,0 正常,非 0 表示失败(data 此时为 null)
data.progress进度百分比,100 表示完成
message异常时的提示

2.3 完整流程#

要点:
业务库先建一条 importing 记录,再调石墨。失败时业务库有明确的中间态可以查、可以补偿。
导入完成前不要让用户打开新 fileId,否则用户会看到空文档。前端应在 status='ready' 时再开放访问。
轮询用同一个 taskId,间隔不少于 3 秒,配合指数退避;总超时建议 10–15 分钟(不超过石墨 10 分钟硬上限太多)。

2.4 cURL 示例#

2.5 与模板功能的关系#

把外部模板(docx / xlsx / pptx)一次性导入为石墨协同文件并标记为"模板"后,后续业务实例可以通过复制接口套用模板。"导入 → 模板入库 → 复制"是模板功能的完整链路,参见文档模板功能。

三、导出文件#

3.1 接口定义#

POST /sdk/v2/api/files/v1/export/{fileId}
Header:        X-Shimo-Signature, X-Shimo-Token
Content-Type:  application/json
Body:
  type           必填  目标导出格式
  exportSheetId  否    已废弃,导出 spreadsheet 为 csv 时曾用
成功响应:
{ 
  "status": 0, 
  "message": "", 
  "data": { 
    "taskId": "3oo4vnBJgcG5HxMm:1:603:docx"
  }
}
导出支持的格式:
石墨文件类型默认导出支持导出
documentdocxdocx, md, jpg, pdf
documentProdocxdocx, pdf, wps
spreadsheetxlsxxlsx
presentationpptxpptx, pdf
tablexlsxxlsx
注意点:
同一文件可并发导出为多种格式。例如同时导出 PDF 和 docx 各一份,互不干扰。
任务最长 10 分钟。超过这个时间任务被服务端终止。
不要在 taskId 里包含敏感语义。taskId 由石墨生成,用作幂等键即可。

3.2 查询进度#

POST /sdk/v2/api/files/v1/export/progress
Body: { "taskId": "<上一步返回的 taskId>" }
响应字段:
字段含义
status任务状态,0 正常,非 0 失败
data.progress进度,100 完成
data.downloadUrl文件下载地址(完成后才有)
两条硬性约束:
downloadUrl 有效期 5 分钟。超过后失效,需要再次调用进度接口拿新地址(同一 taskId 仍有效)。
进度 ≥30 分钟未变化 视为任务失败。停止轮询、记录失败原因、用新的请求重建任务。

3.3 完整流程#

要点:
拿到 downloadUrl 后要在 5 分钟内消费掉。常见做法:后端立即转存到对象存储,再把对象存储链接返回前端,避免把临时下载链接直接暴露给用户。
导出任务幂等性靠 taskId。重复调用 /export/{fileId} 同一 type 会得到不同 taskId,业务侧需要自己去重(例如基于 fileId + type + 触发时间窗)。

3.4 cURL 示例#

四、异常与重试#

4.1 导出任务状态机#

4.2 上线检查项#

轮询有总超时(建议导入 ≤15 分钟、导出 ≤30 分钟),不要无限循环。
批量场景有并发上限,避免把任务队列打爆。
失败日志记录 taskId / fileId / type / 文件大小 / message,便于事后排查。
导出归档统一存到对象存储,不把 downloadUrl 直接暴露给前端(链接 5 分钟过期且无防盗链能力)。
修改于 2026-06-22 02:43:30
上一页
协同文件复制与删除
下一页
常见问题处理
Built with