ONLYOFFICE历史版本开发技术之二

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/details/79690391

 1.它只支持word的历史版本,PowerPoint和Excel不支持历史版本。 Document history If the document has been previouslyedited using Document Editor, you can view the document history. The history iscurrently available for text document files only. After editing in Document Editor theinformation about the changes during the editing session is sent together withthe changed document: history -this information allows to display the time and the author for each documentversion when you view the document history in the side panel. Must be sent as aproperty changes of the object sent as the argument to the refreshHistory method.This method must be called after the onRequestHistory events. 2.并且历史版本只能看,不能再次编辑。 3.但是能看到哪里做了修改。 4.服务器只保留1个月内的历史版本。 5.能下载下来,可以重新上传进去协作。这是它存在的价值。 它的原理: 当一个协作文档,最后一个人关闭后,协作服务器(下文简写OODS——onlyoffice document server)会返回一条json数据给cms,cms获得这条数据后,解析为结构体,然后做2件事,一个是这条数据里保含了最新文档在OODS中的地址(url),cms根据这个url把文档下载下来,存到cms中,同时更新这个文档在数据库中的时间——这个新的时间(updatedtime)下次用来打开这个文档的key;另外一件事是数据中包含了修改记录文件(changesurl)地址,和这个版本的作者user、时间created,key1等信息,cms获取后需要存到数据库中,不需要下载真正的历史版本文件,只要这些数据比如key1,历史版本修改记录文件地址(changesurl)。 当下次打开这个文件时候,OO只认updatedtime生成的key,历史版本的key1用存在数据库中的,查历史版本key1,OODS就调用存在它里面的版本出来。 会思考的你可能发现了,那么文件其实不用存在本地(cms)吗??有了key1不就行了么?

不行,key1打开的不能编辑。因为看开始的第2点,哈哈。

初步试验代码:

//历史版本保留1个月。比如Unix时间戳(Unix timestamp)expires=1524547423
      var onRequestHistory = function() {
        // var changes=[{
        //     "created":"2018-03-10 14:22:15",
        //     "user":{"id":"8","name":"qin8.xc"}
        // }];
        // alert(changes[0].created);
      	docEditor.refreshHistory({
        "currentVersion": 2,
        "history": [
          {
          	"changes": [{{.changes1}}], //the changes from the history object returned after saving the document
            "created": "2018-03-9 10:15:55",
            "key": "{{.Key}}",//1521951775531484800这里影响历史版本切换
            "serverVersion": "{{.serverVersion1}}", //the serverVersion from the history object returned after saving the document
        	  "user": {
        	    "id": "7",
        	    "name": "qin.xc"
        	  },
        	  "version": 1
        	},
        	{
      		  "changes": [{{.changes2}}],
      		  "created": "2018-03-10 14:11:35",
      		  "key": "1521951775531484800",//
      		  "user": {
      		      "id": "8",
      		      "name": "qin8.xc"
      		  },
      		  "version": 2
      		},
        	{
      		  "changes": [{{.changes2}}],
      		  "created": "2018-03-11 14:11:35",
      		  "key": "1521803509579508900",//当前版本
      		  "user": {
      		      "id": "9",
      		      "name": "qin9.xc"
      		  },
      		  "version": 3
      		},
    		]
  	});
	};

			var onRequestHistoryClose = function() {
  		  document.location.reload();
			};
			var onRequestHistoryData = function(event) {
    		var version = event.data;
    		docEditor.setHistoryData({
    			//下面这里存变化的位置——一个文档附件对应一个这个地址,每次更新??
      		"changesUrl": "http://192.168.99.100:9000/cache/files/1521953170330601700_4540/changes.zip/changes.zip?md5=w6DItkSwyBJkuHDl_CiZZQ==&expires=1524547423&disposition=attachment&ooname=output.zip", //the changesUrl from the JSON object returned after saving the document
      		"key": "",
      		"previous": {
      		  "key": "",//这里不影响版本切换
      		  "url": ""//http://192.168.99.100:9000/cache/files/1521953170330601700_4540/output.docx/output.docx?md5=eSwnrSSumTeMuh59IoXhCQ==&expires=1524547423&disposition=attachment&ooname=output.docx这里影响版本
      		},
      		"url": "",
      		"version":4 //version
    		})
	};

    	window.docEditor = new DocsAPI.DocEditor("placeholder",
      {
        "events": {
          "onRequestHistory": onRequestHistory,
          "onRequestHistoryClose": onRequestHistoryClose,
          "onRequestHistoryData": onRequestHistoryData,
        },

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

Windows无法安装到这个磁盘。请确保在计算机的BIOS菜单中启用了磁盘控制器

今天一朋友问我这个问题,呃,以前我也遇到过,但忘记记录了,这次就记录一下吧,就懒得打字了,图片里面很清楚了 ? ? ? ? ? 不说点什么的话是不是太水了O(∩...

7157
来自专栏任浩强的运维生涯

Jenkins的初级应用(1)-Publish Over SSH

    作为Jenkins最基本的应用也是重要的一环就是可以把文件传到服务器上面,或者在服务器上面远程执行命令。一个可在在远程分发了文件之后就控制远程服务器的操...

830
来自专栏码匠的流水账

jib自定义entrypoint

jib的自定义entrypoint是0.9.10及以上版本才支持的,若需要自定义entrypoint,请先升级jib版本。

1171
来自专栏数据和云

快速掌握:大型分布式系统中的缓存架构

CDN(Content Delivery Network 内容分发网络)的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中...

1043
来自专栏Aloys的开发之路

利用Spring中同名Bean相互覆盖的特性,定制平台的类内容。

今天处理了一个问题,J2EE项目依赖了底层平台的功能,平台JAR包中配置了一个Bean,对应的实现类也在该平台JAR包中,由于Bean的配置不是懒加载的,所以在...

4606
来自专栏月牙寂

docker源码分析(1)---框架与engine

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

41011
来自专栏极客生活

python读取hive数据最佳实践

使用pyhive库来连接hive server2提供的对外接口,使用sql语句来对数据进行查询,并处理返回结果。

3092
来自专栏轻扬小栈

linux 百度客户端 非图形界面 小结

2045
来自专栏lgp20151222

Feign使用Hystrix无效原因及解决方法

首先,使用spring-cloud搭建微服务的过程大部分是根据网上的教程来的,由于网上教程的时间较早,而spring-cloud更新迭代较快,会造成依赖上的一些...

1582
来自专栏Linux驱动

Linux-mknod命令(9)

mknod命令用于创建字符设备文件和块设备文件 (ls /dev -l 结果显示b开头和c开头的,即标识了块设备和字符设备。) 为了管理设备,所以设备中都有两个...

24710

扫码关注云+社区

领取腾讯云代金券