onlyoffice历史版本功能实现

一:开启客户端配置

如果不开启,回调请求里面的history和changeUrl是空

二:客户端主要实现2个回调函数

1.实现onRequestHistory事件,该事件会在ui点击查看历史的时候发起,用于展示历史列表
关键在于获取到history的内容,调用refreshHistory方法

docEditor.refreshHistory(// show the document version history
{currentVersion: "31",history: historyList
})

historyList 的数据结构

[{"serverVersion": "7.4.0",//来源回调的history,第一个版本无需该字段"changes": [{//来源回调的history,第一个版本该字段为null"created": "2023-09-28 02:01:25","user": {"id": "uid-2","name": "group-2 xxx"}}, {"created": "2023-09-28 02:01:49","user": {"id": "uid-3","name": "group-3 Hamish Mitchell"}}],"key": "__ffff_200.200.170.119new.docx291695866450703",来源回调的key"version": 30,//需要自己维护"created": "2023-09-28 02:01:25",//自己维护,一般是打开文档的时候记录"user": {//自己维护,一般是打开文档的时候记录"id": "uid-2","name": "group-2 xxx"}
}]

回调的数据结构如下(仅供参考)

 {key: '1696822265751m4sq5vs50j',status: 2,url: 'http://xxx/cache/files/data/1696822265751m4sq5vs50j_9201/output.docx/output.docx?md5=jljJJVUlAm4pYX_6mvC_Lw&expires=1696823346&filename=output.docx',changesurl: 'http://xxxx/cache/files/data/1696822265751m4sq5vs50j_9201/changes.zip/changes.zip?md5=ivaLJ_lI0MK5nBdCqy8HLw&expires=1696823346&filename=changes.zip',history: { serverVersion: '7.4.0', changes: [ [Object] ] },users: [ '64773bdb97acf80031f4ef56' ],actions: [ { type: 0, userid: '64773bdb97acf80031f4ef56' } ],lastsave: '2023-10-09T03:33:46.000Z',notmodified: true,filetype: 'docx'
}

historyList 排序要求:按version升序排序

2.实现onRequestHistoryData事件,该事件会ui点击查看具体的某个历史的时候触发
关键在于获取某个版本的具体historyData,调用setHistoryData方法发起请求

function onRequestHistoryData(data) {var version = data.data;//对应点击哪个版本docEditor.setHistoryData(historyData);
}

 historyData的数据结构

{
"fileType": "docx",
"version": 25,
"key": "xxxxxx",
"url": "http://xxxxx/history?fileName=new.docx&file=prev.docx&ver=25&useraddress=xxx",//当前版本下载的url
"directUrl": null,
"previous": {//上一个版本的信息,如果无上个版本,可以不要这个字段,例如第一个版本"fileType": "docx","key": "new.docx231684394201684","url": "http://xxx/history?fileName=new.docx&file=prev.docx&ver=24&useraddress=xxxx","directUrl": null
},
"changesUrl": "http://xxxx&file=diff.zip&ver=24",//下载当前版本历史记录存储的diff.zip文件
"token": "eyJhbGciOiJIUzI1NiIsInR"//当条数据签名
}

三:服务端所有工作都是围绕实现上述的数据

1.处理onlyoffice发起的回调函数,将保存history信息,更新文件,保存历史文件,保存changeUrl的zip文件,刷新key

例如,刚新建个文件的时候就添加个历史记录版本是1,客户端编辑后,回调的处理,保存版本号是2的历史记录,创建个版本号是2的目录,里面存放上个版本的文件,和回调changeUrl里的文件,拼接historyData的changesUrl就用对应版本号里面对应的信息,url也是。changeUrl的内容是当前版本和上个版本的对比

2.实现getHistoryList接口,获取对应的historyList给到客户端用

3.实现getHistoryData接口,返回historyData给客户端用

4.实现download相关的接口,返回historyData里面url和changeUrl会下载到的文件

其他:

实现界面有关闭按钮:只需要在客户端实现onRequestHistoryClose函数里面执行location.reload()即可 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/129285.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring的事务控制

目录 基于AOP的声明事务控制 Spring事务编程概述 搭建测试环境 基于xml声明式事务控制 详解 事务增强的AOP 平台事务管理器 Spring提供的Advice(重点介绍) 原理 (源码没有翻太明白) 基于注解声明式事务控制 基于AOP的声明…

Visual Studio 2019中的安全问题

最近,在使用Visual Studio 2019的时候遇到了一个很奇怪的问题,如下所示。 这里一直在说scanf函数不安全,导致报错,然后上网查了查相关资料,发现在代码中加那么一句就可以了,而且必须放在最前面。 #define …

手机待办事项app哪个好?

手机是日常很多人随身携带的设备,手机除了拥有通讯功能外,还能帮助大家高效管理日常工作,借助手机上的待办事项提醒APP可以快速地帮助大家规划日常事务,提高工作的效率。 过去,我也曾经在寻找一款能够将工作任务清晰罗…

电脑技巧:推荐一款桌面增强工具AquaSnap(附下载)

下载:飞猫盘|文件加速传输工具|云盘|橘猫旗下新概念云平台,取件码:ZdRW 一、软件介绍 AquaSnap(界面增强软件)是一款功能强大的界面增强软件。这款软件支持屏幕边缘吸附与屏幕分屏即多显示器控制、摇晃窗口…

MFC扩展库BCGControlBar Pro v33.6 - 网格、报表控件功能升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.6已正式发布了,此版本包含了对图表组件的改进、带隐藏标签的单类功能区栏…

Eclipse MAT解析headp dump,total size小于file size

1. 问题描述 使用Eclipse MAT分析20GB的heap dump文件 最后解析出来dump size只有1GB 2. 原因:heap dump中包含许多unreachable objects Eclipse MAT的官方文档,《Basic Tutorial》章节,有对上图的Overview page做介绍 针对total size小…

unity操作_刚体 c#

刚体Rigidbody 首先在场景中创建一个Plane 位置重置一下 再创建一个Cube 充值 y0.5 我们可以看出创建的Cube 和 Plane都自带碰撞器 Plane用的是网格碰撞器 我们可以通过网格世界看到不同的网格碰撞器 发生碰撞(条件): 两个物体都有碰撞器 …

韦东山D1S板子——xfel工具无法烧写bin文件到spi norFlash问题解决

1、早期问题排查 (1)参考博客:《韦东山D1S板子——烧录spi norFlash失败问题排查过程》; (2)早期排查到xfel工具烧写spi norFlash显示成功,但是实际没有烧写进bin文件,怀疑是norFlas…

数据统计--图形报表--ApacheEcharts技术 --苍穹外卖day10

Apache Echarts 营业额统计 重点:已完成订单金额要排除其他状态的金额 根据时间选择区间 设计vo用于后端向前端传输数据,dto用于后端接收前端发送的数据 GetMapping("/turnoverStatistics")ApiOperation("营业额统计")public Result<TurnoverReportVO…

云计算安全和云原生安全的关系

云计算安全(Cloud Computing Security)指的是在云环境中保护数据、应用程序和基础设施的安全性。它包括保护云服务提供商的基础设施和平台&#xff0c;以及云服务用户的数据和应用程序。 云原生安全(Cloud-Native Security)则是指在云原生环境中保护应用程序和服务的安全性。云…

Python 无废话-办公自动化Excel格式美化

设置字体 在使用openpyxl 处理excel 设置格式&#xff0c;需要导入Font类&#xff0c;设置Font初始化参数&#xff0c;常见参数如下&#xff1a; 关键字参数 数据类型 描述 name 字符串 字体名称&#xff0c;如Calibri或Times New Roman size 整型 大小点数 bold …

解决: 使用html2canvas和print-js打印组件时, 超出高度出现空白页

如果所示&#xff1a;当我利用html2canvas转换成图片后, 然后使用print-js打印多张图片, 第一张会出现空白页 打印组件可参考这个: Vue-使用html2canvas和print-js打印组件 解决: 因为是使用html2canvas转换成图片后才打印的, 而图片是行内块级元素, 会有间隙, 所以被挤下去了…