onlyoffice教程0x04-文件保存

文件保存流程 onlyoffice对文件保存处理流程如下

  • 用户在文档编辑器中对文档进行编辑
  • 文档编辑器将变化发送到document server(文档服务器)
  • 当用户关闭文档编辑器document server会回调用户配置的callbackurl进行通知
  • 回调程序下载最新的文档保存到文档服务器中
实现 代码 首先,和上一篇一样,本地创建html文件
onlyoffice教程 - 锐客网

callbackUrl指定回调接口
document server会在用户编辑文档期间多次回调接口,会将用户当前编辑状态发送给回调接口,比如当用户打开文档进行编辑时会回调接口,发送以下数据
{ "key": "100000", "status": 1, "users": [ "004" ], "actions": [ { "type": 1, "userid": "004" } ] }

status表示用户编辑状态,分别有以下几种状态
  • 1 -文档正在被编辑,一般用户打开文档时的状态,
  • 2 - 文档正要被document server保存,用户完成编辑关闭编辑器的状态,
  • 3 - 文档保存失败
  • 4 - 文档内容未改变
  • 6 - 用户手动点击保存,这个需要额外配置
  • 7 - 用户手动保存失败
一般我们只需关注2和6两个状态即可,我们只关系保存后的文档,这两种状态有什么区别呢,默认情况下,当只有用户关闭文档编辑器后,经过差不多10s左右,document server会将2状态回调接口,只所以有10s的延迟取决于文件的大小和转换的时长,因为onlyoffice后台需要将文档转换为OPEN XML格式,有两种解决方案,一种是修改配置文件减少延迟时间(不建议这样做),可以编辑配置文件documentserver/default.json
{ "services": { "CoAuthoring": { "server": { "savetimeoutdelay": 5000 } } } }

另外一种是启用强制保存功能,也就是用户点击保存时会立马调用接口,修改编辑器配置,将forcesave设置为true
"editorConfig": { "lang": "zh-CN", "user": { "group": "admin", "id": "004", "name": "郑剑峰" }, "callbackUrl": "http://47.113.219.133:8080/api/office/callback", "customization": { "forcesave": true } },

当用户保存时,onlyoffice会发送status=6的数据,完整数据如下
{ "key": "100000", "status": 6, "url": "http://47.113.219.133:9001/cache/files/100000_5043/output.docx/output.docx?md5=XkF44g2sAkkZVDHCFbJ5Ug&expires=1638441611&filename=output.docx", "changesurl": "http://47.113.219.133:9001/cache/files/100000_5043/changes.zip/changes.zip?md5=CGdhAG-sO5AUhM3JsKL_Fg&expires=1638441611&filename=changes.zip", "history": { "serverVersion": "6.4.2", "changes": [ { "created": "2021-12-02 10:23:57", "user": { "id": "004", "name": "admin 郑剑峰" } } ] }, "users": [ "004" ], "actions": [ { "type": 2, "userid": "004" } ], "lastsave": "2021-12-02T10:24:55.000Z", "notmodified": false }

  • Key:文档主键
  • url:保存后的文档路径
  • changesurl:onlyoffice会将文档变化内容保存到一个zip压缩文件中,如果有需要可以将该文件保存起来,可以i 通过editor相关api在界面上显示变化的内容
  • history:文档编辑历史
  • users:编辑用户,因为onlyoffice支持协同编辑,所以用户可能是多个
callback handler 【onlyoffice教程0x04-文件保存】onlyoffice会通过post方式回调接口,因此任何支持post请求的接口都可以作为回调接口,回调接口需要返回以下信息不然onlyoffice会当作处理处理,在界面上显示保存错误
{ "error": 0 }

回调函数在后台需要将最新的文件保存到文件服务器中,不可以只保存文件路径,onlyoffice不负责文件的存储
参考文档
  • callback文档
  • 文件保存文档

    推荐阅读