基于开源方案构建文件在线预览与office协同编辑平台的架构实现(开源在线文档协作)云科研畜牧所广西畜牧所

在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览、在线编辑、多人协同编辑等种种能力的诉求。

对于人力不是特别充裕、或者项目投入预期规划不是特别大的公司或者项目而言,通常会选择基于一些开源方案来实现,但是开源组件选择之后,如何将其无缝对接融入到自己的业务系统中并完全支持自身诉求的实现,**不仅要能用、而且要好用,**其实也是一个需要好好思量的问题。

在正式开始构建在线的文件管理服务前,首先是分析下需要支持的功能诉求:

选型确定之后,就是如何与现有业务系统进行整合了。因为开源组件往往都是通用逻辑设计的,而业务系统的逻辑又各不相同,所以如何去整合并方便扩展出自己需要的定制化能力,成了下一步摆在眼前需要处理的问题。

系统边界划定,对业务系统整体的接入配合而言就简单了:

预览编辑服务,作为业务系统的边缘代理适配器模块,需要保证提供给左侧业务系统的接口的稳定,而右侧具体对接的开源方案、内部处理逻辑等,则可以随意调整。

所以在实施的时候,在服务端的文件预览编辑服务中进行了封装,对外提供服务端API接口,服务端自带一个简单HTML界面(基于SpringBootThymeleaf实现),业务请求对应服务端提供的独立html界面,并在界面中完成使用OnlyOffice的JSapi请求的操作。

具体步骤说明如下:

这样就实现整体的交互封装,业务可以代码无耦合的方式来直接使用预览能力。具体的office文档在线预览与编辑的能力实现,由开源的OnlyOffice来提供。

具体使用的时候,交互逻辑如下:

看似很复杂的逻辑,但是经过封装之后,对于业务使用而言其实很简单,只要在发送给文件预览服务的请求中,给定一个文件下载地址与文件保存回调地址即可。

前面有提过,采用OnlyOffice来实现office文档的在线协同编辑,关于OnlyOffice在线编辑的原理,其官网给出的介绍如下:

对上述步骤解释如下:

也即当用户关闭文档编辑界面之后,会触发文档的保存事件,回调callback接口,将保存事件推送给服务端,并告知服务端变更后的文档地址,这样服务端可以从给定的地址下载变更后的文档,然后更新到自己的存储中。

结合到我们具体的项目使用中,其具体的交互过程展开阐述下,就是下图的过程:

这里,一个在线编辑操作的回调请求内容示例如下:

字段

字段类型

含义说明

actions

List

每个用户加入或者退出此文档的编辑的动作信息。其中具体type的取值0表示断开连接,1表示建立连接

key

String

目标文档在OnlyOffice中处理的唯一标识ID,注意这里的key与业务系统中目标文件实际的唯一ID并非一个概念,不能混为一谈,因为业务系统中某个文件的ID需要保持不变,但是在OnlyOffice中编辑的时候,这个key需要不停的变。

status

Integer

文档当前的操作状态类型,取值说明:1:文档正在被编辑2:文件已准备好保存3:文档保存发生错误4:文件关闭,没有变化6:文档正在被编辑,但是当前状态已经被保存7:强制保存文档时发生错误

url

改动后的文档的下载地址,可以从这个地址下载到变更后的文件,然后存储更新业务系统中实际的文档

实际测试的时候发现,此处的回调接口被调用的情况非常的频繁,务必要注意当且仅当actions中所有的对象的type都等于0的时候,也即所有用户均已经退出编辑且文档已经准备好保存的时候,回调接口被调用的时候才需要去更新key值。

这里是在实际构建的时候踩坑较久的一个地方,下面章节中展开详细说下踩坑过程。

看了下官网的问题原因解释,就是因为文档编辑之后,原来的key对应的文档已经被编辑过,已经不能被打开了(可以把key理解为不同的version,文档被编辑之后,version变更了,原来老的version就不允许操作了)。最后官网还很贴心地提示:别忘了每次编辑之后要重新生成一个新的key!

按照官网的介绍,在callback接口被调用的时候,重新为文件生成一个key,后续新的用户想要加入此文档的编辑的时候,都是拿到新生成的一个key,这样不就可以了吗?

try{//如果redis里面有缓存此文档对应的key值,则直接使用fileUniqueKey=redisCacheOperateService.getFileUniqueKeyDetail(fileId);}catch(Exceptione){//如果redis里面没有缓存此文档对应的key值,则生成对应的key并加入缓存中fileUniqueKey=FileUniqueKey.builder().build();redisCacheOperateService.saveOrUpdateFileUniqueKeyDetail(fileUniqueKey);}//获取本次在线操作对应的key值document.setKey(fileUniqueKey.generatekey());//编辑成功后,重新生成随机码,实现key值变化的目的fileUniqueKey.updateRandomUniqueKey();redisCacheOperateService.saveOrUpdateFileUniqueKeyDetail(fileUniqueKey);按照上述思路改完后,再次尝试,发现:

难道只有让大家都约好了一起加入进去再开始编辑才行吗?那这个在线编辑功能显然就是个鸡肋了——显然OnlyOffice也不太可能会是这种实现。再全面复盘了下测试的现象,分析了下可能原因:

基于上述分析:

所以说,如果每次只要有用户还在线的时候,这个文档的key就不应该变,只有等某篇文档的所有用户都关闭编辑窗口的时候,再去处理文档key的变更,这样不就解决问题了吗?

那问题就简单了,按照这个思路修改了下callback的代码逻辑,判断下某篇文档的所有用户都退出编辑之后,再去重新生成新的key值。

代码演示如下:

为了保障预览服务的可靠,在生产环境上规划实施集群化部署。从上一章的阐述中,我们知道OnlyOffice的功能实现严重依赖单机本地的缓存数据信息,在集群部署的场景下,过度依赖本地缓存的弊端就显现出来了。

集群化部署,本以为会很简单,直接部署多个docker节点,然后使用Nginx做一下反向代理以及负载均衡不就可以了嘛?但是实际实施的时候却发现在协同编辑场景下出现了预期之外的问题。因为多人在线协同编辑的能力要求所有人对某篇文档的编辑请求都在同一个OnlyOffice服务节点上才行,而Nginx随机负载分发,会导致同一篇文档的编辑请求分发到不同节点上,这样就会导致编辑的内容相互覆盖。

因为用户的请求并不是直接打到OnlyOffice地址上的,而是先打到文件预览服务中,然后由文件预览服务经过某种策略处理后,再将请求重定向到OnlyOffice服务上进行文档操作的,所以这里我们可以通过增加一个简单的分发策略,保证对同一个文档的所有的请求操作,都被分发到固定的一个OnlyOffice服务上处理即可。

这里的分发策略,考虑有2种方案:

具体代码逻辑如下:

kkFileView作为一个基于JAVA构建的可独立集成部署的文件预览开源组件,其在各种文件的预览上表现非常的优异,集成起来也非常的简单,直接提供下文件下载的地址就可以了。支持Office文档、图片、视频、音频、压缩包等各种文档的预览。

对于kkFileView的集成,我们采用了与OnlyOffice集成截然不同的处理策略,因为kkFileView基于JAVASpringBoot技术栈构建,与我们业务系统技术栈一致,所以我们基于kkFileView的源码进行了深度的定制整改。主要包括几方面:

基于前面整体的规划策略,Office文档使用OnlyOffice进行预览操作,非Office文档则由kkFileView实现预览操作(业务调用方无感知,都是统一一个url地址)。开发完成部署上线之后,功能也都一切正常。

虽然系统支持了Office文档的在线预览与编辑能力,但是统计了下,其实近乎95%的Office文档操作都是预览操作,考虑到kkFileView预览PDF的速度非常的快,因此决定通过kkFileView来支持Office文档的预览操作,而OnlyOffice只用来做Office文档的在线协同编辑,或者用于某些kkFileView预览效果不够好的Office文档的兜底预览场景。

因为kkFileView预览Office文档的策略是先将Office文档转换为PDF,然后采用预览PDF的策略来实现的,为了进一步的提升速度,避免每次都实时去进行Office文档转PDF的操作,所以设计采用异步事件的方式进行预处理转换,异步转化Office文档为PDF,然后对于Office文档只读场景直接使用PDF预览即可。

当业务系统中的文件内容有新增或者变更的时候,具体的异步转换处理的时序操作逻辑如下:

在线协同编辑的时候,需要监听下每个文件的变更,如果编辑后的话,需要异步重新转换下文档缓存内容。

到这里呢,对于快速预览office文档的逻辑,就算基本完成了。按照当前的策略,对于office文档预览的场景,默认都会使用转换后的缓存PDF文档进行预览。在实际验证的时候,偶尔会遇到一些转换后PDF预览效果不佳的情况,所以为了解决此类问题,又对处理流程的逻辑进行了一点优化,请求参数中,预留了个字段,可以用于调用方设定是否禁用本地转换缓存结果文件进行预览:

到此呢,整个文档的在线预览与编辑能力的构建,就算完成了。在处理具体的文档的预览或者在线编辑请求的时候,对应的处理判断总体逻辑如下:

回顾下构建之初规划的功能诉求,也已经全部支持:

功能点

支持情况

常规文档在线预览

office文档在线预览

office文档协同编辑

集群部署

业务解耦

整体系统层面的网元模块架构情况如下图所示,整个预览服务中,所有内部逻辑均封装在内部,统一由预览编辑服务对外提供API接口,供业务服务进行调用与交互。后续如果需要对预览服务的实现策略进行调整,也无需变更外部业务侧的逻辑,实现与业务逻辑解耦的效果。

THE END
1.中南大学公文协同工作平台请用工号和门 户密码登陆! 用户名:密码: 忘记密码 OA系统Office控件PDF阅读器 Word2003Word2007兼容补丁 PDFCreator转换器移动办公下载http://oa.its.csu.edu.cn/
2.我来wolai用“我来”搭建一站式协作平台,不论团队或个人,开箱即用! 个人免费版空间 适合新手体验 0元 / 年 立即注册 免费版包含: 块数量 1000 基础块 高级块 不限设备数多端同步 全平台客户端 5 名协作访客人数 数据表格 块引用 个人专业版空间 适合个人使用 https://wolai.com/
3.发在线文档,在线文档发布,重塑文档共享与协作的新模式5、保存并分享:完成文档编辑后,用户可以选择保存文档,并通过平台提供的分享功能将文档分享给其他人。 6、团队协作与评论:对于需要团队协作的文档,用户还可以邀请团队成员共同编辑和讨论,实现实时协作。 注意事项 1、数据安全:在发布在线文档时,要确保文档内容不涉及敏感信息,如个人隐私、商业机密等,选择信誉良好的在线http://5g.hnjwwzy.cn/post/612.html
4.永中文档全景解决方案,高效学习办公,永中文档提供文档在线管理、多人协作编辑、历史版本管理、权限管控、文档安全等文档处理能力https://www.yozocloud.cn/p/enterprise.html
5.永中文档全景解决方案,高效学习办公,永中文档提供文档在线管理、多人协作编辑、历史版本管理、权限管控、文档安全等文档处理能力http://www.yozocloud.net/
6.新一代知识管理与协同平台,在线文档笔记知识库,项目管理协作FlowUs息流新一代知识管理与协作平台,以云端笔记为载体, 为个人和团队提供在线协作文档、多维表、流程图、网盘等多形态功能。产品覆盖移动及PC端全生态链条,依托FlowUs息流,团队和个人用户能够实现项目管理、知识库、网盘、内部工作流等一站式解决方案。https://flowus.cn/product
7.石墨文档石墨文档-全新一代云Office办公软件,支持多人在线文档协同办公,实现多终端、跨地域、随时随地在线办公,涵盖在线文档、在线表格、应用表格等8大办公套件即写即存统一管理、高效共享是企业云协同办公系统与在线办公平台的更好选择。https://www.hmwww.cn/site/1605.html
8.学生组织使用在线文档协作的百种姿势上一次我们为大家介绍了以下四款在线协作文档 好多同学看完还是有点懵,在线协作文档平台能帮助我们做什么呢? 组织运营和活动运营中的哪些环节可以使用到这些平台呢? 今天李部就用“一起写”来实例告诉你们使用在线协作文档的百种姿势 上车吧! 1、最佳的文档类文件云盘 https://www.douban.com/note/683490321/
9.畅写文档畅写文档是集文档在线编辑、多人协作、集中管控、安全存储为一体化的全新一代文档协作办公平台。产品服务于金融、电力、教育、政府、制造、医药等中大行业企业客户,提高企业协作办公效率,沉淀企业数字化资产,集中管控企业重要数据。 畅写文档-文档在线编辑、多人协作、集中管控、安全存储 https://pidoutv.com/sites/10592.html
10.石墨文档官网石墨文档-全新一代云Office办公软件,支持多人在线文档协同办公,实现多终端、跨地域、随时随地在线办公,涵盖在线文档、在线表格、应用表格等8大办公套件即写即存统一管理、高效共享是企业云协同办公系统与在线办公平台的更好选择。https://shimo.im/?utm_source=www.appinn.com
11.6款开源在线文档协同工具:免费高效跨平台的团队协作利器在当今的数字化办公环境中,团队协作和文档共享变得尤为重要。开源在线文档协同工具以其免费、高效、跨平台的特点,成为了许多企业和团队的首选。本文将为您推荐6款备受好评的开源在线文档协同工具,包括它们的主要功能、发展历程、价格费用、产品特色、优缺点以及适用场景等方面的详细介绍,帮助您选择最适合自己团队的工具。https://www.banlikanban.com/info/tool/4464.html
12.腾讯文档企业版TDE多人实时在线编辑文档协作与文件共享平台腾讯文档企业版(Tencent Docs Enterprise,TDE) 是基于多人实时在线编辑技术的文档协作与文件共享平台,为各个规模的企业或团队提供安全可靠、功能强大的企业办公协同工具;不论何时何地,都可以满足您在不同场景下的文档协作、资料沉淀、文件共享、移动办公等需求,为您节约时间成本,提高工作效率。 https://www.yun88.com/product/3461.html
13.石墨文档石墨文档浏览人数已经达到2,767,如你需要查询该站的相关权重信息,可以点击"5118数据""爱站数据""Chinaz数据"进入;以目前的网站数据参考,建议大家请以爱站数据为准,更多网站价值评估因素如:石墨文档的访问速度、搜索引擎收录以及索引量、用户体验等;当然要评估一个站的价值,最主要还是需要根据您自身的需求以及需要,https://jiafangbb.com/sites/1913.html
14.告别低效率的传统办公工具,4款主流在线协作文档对比腾讯文档支持随时随地创建、编辑的多人协作式在线文档工具,拥有一键翻译、实时股票函数和浏览权限安全可控等智能化操作,以及打通QQ、微信等多个平台编辑和分享的能力。 腾讯文档支持导入导出Office文件,无缝兼容。拥有一键翻译、实时股票函数、语音输入转文字、图片OCR文字提取、表格智能分裂、查看历史修订记录等特色功能,支持https://mydown.yesky.com/news/2147439232.html
15.在线文档编辑协作文档云文档产品优势 Word文档 Excel表格 PPT幻灯片 PDF文档 产品优势 企业网盘全终端多人编辑 可在网页/桌面/移动端创建Word/Excel/PPT,并直接在线编辑。 兼容原生文档共享 完美兼容Office/WPS格式,常用功能全覆盖,保留您的编辑习惯。 云端、本地无缝衔接同步 本地文档上云后可直接在线编辑,在线文档也可在本地打开。 协作文https://open.fangcloud.com/cms/online_edit.html
16.设计师的在线协作平台FabrieFabrie 是设计师的新一代在线协作平台,支持白板在线编辑图文、便利贴、思维导图、关联多维表格等功能,灵感收集、设计调研、方案评审、图纸标注、归档一步到位,多人协同,更有AI辅助设计工作流!https://www.fabrie.cn/home
17.企业在线文字处理软件ONLYOFFICE实时在线打开、编辑和协作处理Word文档 开始并选择工作地点 在ONLYOFFICE 协作空间 在协作空间中安全地创建房间,邀请他人,从任何桌面或移动设备查看、编辑和协作处理各种文档。 立即创建免费账户开始 在您使用的平台 连接ONLYOFFICE 文档,直接从您的应用程序编辑文档。40 多个现成集成:Box、Moodle、Nextcloud、Odoo、Wordpresshttps://www.onlyoffice.com/zh/document-editor.aspx
18.蓝湖蓝湖是一款产品文档和设计图的共享平台,帮助互联网团队更好地管理文档和设计图。蓝湖可以在线展示Axure,自动生成设计图标注,与团队共享设计图,展示页面之间的跳转关系。蓝湖支持从Sketch、Ps一键共享、在线讨论,而且蓝湖只需简单几步就能将设计图变成一个可以点击的演http://www.lanhuapp.com/
19.讯飞文档mac版下载讯飞文档(在线多人文档协作编辑软件)formacv讯飞文档(在线多人文档协作编辑软件) for mac v2.1.1142 苹果电脑版 讯飞文档mac版下载投诉报错 软件大小:124MB 软件语言:简体中文 软件类型:国产软件 软件授权:免费软件 软件类别:办公软件 应用平台:Mac平台 软件官网:官方网址 更新时间:2024-02-01 网友评分: 360通过 腾讯通过 金山通过 124MB https://www.jb51.net/softs/739706.html
20.轻松协作和共享:在线文档的利与弊4.跨平台:在线文档可以在不同终端上进行访问,包括PC、手机、平板电脑等。这样方便成员高效工作而不受限于设备的类型和操作系统。 二、缺点 1.安全问题:由于在线文档存储于云端,也就是第三方服务的服务器上,可能存在数据违规操作、数据泄露的风险。企业需要考虑数据隐私和安全性,选择可靠的第三方服务商。 https://www.filez.com/news/detail/af9949124b23fdd024440714528a77d8.html
21.畅写文档畅写文档管理系统(以下简称“畅写文档”)是集文档在线编辑、多人协作、集中管控、安全存储为一体化的全新一代文档协作办公平台。产品服务于金融、电力、教育、政府、制造、医药等中大行业企业客户,提高企业协作办公效率,沉淀企业数字化资产,集中管控企业重要数据。https://www.91changxie.com/cooperation/
22.轻雀文档官网,轻雀文档为企业提供在线office,支持在线文档在线腾讯乐享是腾讯旗下基于腾讯十余年企业管理精华,提供企业直播、在线课堂、考试、学习地图、文档、问卷调研等多项应用服务。 语雀 语雀新一代文档与知识协同工具,让协作更高效,打造轻松流畅的工作体验,面向未来组织,助力知识协同。 石墨文档 石墨文档在线协同办公系统平台,支持云端多人在线协作文档,表格,幻灯片。 https://www.e4w.cn/sites/2636.html
23.讯飞文档—多人协作在线文档编辑讯飞文档,是由科大讯飞出品的一款支持多人多端同时编辑的在线文档App。真正实现在线文档编辑,多人协作管理,多设备云端同步,高效办公新方式!https://test.iflydocs.com/
24.ApifoxAPI 设计、开发、测试一体化协作平台 Apifox = Postman + Swagger + Mock + JMeter API 文档 API 调试 API Mock API 自动化测试 使用Web 版 免费下载 一套系统、一份数据,解决多个 API 工具之间的数据同步问题 只要定义好 API 文档,API 调试、API Mock、API 自动化测试即可直接使用,无需再次定义。 API 文档https://www.apifox.cn/
25.在线文档,在线Word,云文档,雷鸟文档雷鸟365协作是云端office。旗下雷鸟文档是纯正的网页Word,支持多人同时在线编辑的文档。拥有Word的80%功能,完美支持各种格式的导入导出。而且还可以通过二维码外分享,可以让别人通过网页、微信或APP提交数据。https://www.leiniao365.com/word
26.在线文档文档在线文档多人编辑在线文档是钉钉面向商务办公领域的多人在线协同工具,支持多人在线共享文档,在线查阅或编辑文档,多人多端实时在线协同,数据实时保存,高效办公在线文档共享平台选钉钉智能文档https://page.dingtalk.com/wow/dingtalk/act/document