跨服务器Confluence内容迁移API实现咨询(导出功能故障)
Confluence跨实例内容迁移(API方案)
一、提取目标实例的内容
- 通过REST API批量获取页面数据
- 核心API接口:
GET /rest/api/content - 关键参数:
spaceKey:指定要提取的空间Key,缩小目标内容范围expand=body.storage,version,ancestors:展开页面的存储格式内容、版本信息、父页面层级,确保拿到完整迁移所需数据limit=100:一次请求最多返回100条数据(API默认限制),配合start参数实现分页,比如start=100获取下一页,直到返回的results数组为空
- 示例curl请求:
curl -u 用户名:密码 "https://原Confluence域名/rest/api/content?spaceKey=DEV&expand=body.storage,version,ancestors&limit=100"
- 核心API接口:
- 本地保存数据
- 将返回的每个页面的核心字段(
title、body.storage.value、spaceKey、ancestors、version.number)整理为JSON格式文件,按空间或页面层级分类存储,方便后续导入操作。
- 将返回的每个页面的核心字段(
二、将内容导入目标服务器
- 提前准备目标空间
- 如果目标实例没有对应空间,先通过API创建:
curl -u 目标实例用户名:密码 -X POST -H "Content-Type: application/json" -d '{"key":"DEV","name":"开发文档空间"}' "https://目标Confluence域名/rest/api/space"
- 如果目标实例没有对应空间,先通过API创建:
- 按层级导入页面
- 按页面的父级层级顺序导入(先导入父页面,再导入子页面),避免父页面不存在导致的层级错误
- 核心API接口:
POST /rest/api/content - 示例创建页面的curl请求:
curl -u 目标实例用户名:密码 -X POST -H "Content-Type: application/json" -d '{ "type": "page", "title": "原页面标题", "space": {"key": "DEV"}, "body": { "storage": { "value": "原页面的storage格式内容", "representation": "storage" } }, "ancestors": [{"id": "父页面在目标实例的ID"}] }' "https://目标Confluence域名/rest/api/content" - 若需保留版本历史,可在页面创建后,通过
PUT /rest/api/content/{页面ID}/version接口更新版本信息。
三、解决WebDev操作生成空白页的问题
- 原因:WebDev工具抓取的是前端渲染后的HTML,而非Confluence官方的
storage格式内容,部分宏、样式在目标实例无法解析;或是页面内容为动态加载,静态抓取未获取完整内容。 - 解决方式:
- 优先改用API获取官方
storage格式内容(这是Confluence编辑器原生支持的格式,兼容性最好) - 若坚持用前端方式,需等待页面所有内容(包括异步加载的宏、附件预览)完全渲染后,复制编辑器内的原始内容(而非页面HTML源码),再粘贴到目标实例编辑器中。
- 优先改用API获取官方
内容的提问来源于stack exchange,提问作者tuaniz
相关产品推荐
相关产品推荐

