项目整体设计思路为使用onlyoffice做文档预览编辑服务,文件存储使用minio,后端使用springboot集成,数据库为mysql,文章主要包含以下三块内容:
- onlyoffice安装
- minio安装
- springboot整合
一、onlyoffice
onlyoffice介绍
简单地说,就是将 Word 、Excel、PPT搬到了云端,只需要一个浏览器即可以在线预览编辑。
docker安装
拉取onlyoffice镜像
docker pull onlyoffice/documentserver
拉取完成,查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
onlyoffice/documentserver latest 731f9669f88e 12 months ago 2.72GB
快速创建并且启动onlyoffice容器
此处为快速创建方法,实际中可自定义添加其他参数
docker run -i -t -d -p 80:80 --restart=always onlyoffice/documentserver
关键参数解读
-p 80:80表示端口映射,前者是宿主机端口,后者是容器内的映射端口。--restart=always容器自动重启onlyoffice/documentserver镜像名称
查看容器是否在运行
docker ps
检查安装是否成功
第一种方式:命令行中
第二种方式:浏览器中(http://你的ip:20053/welcome/)
安装测试实例
sudo docker exec 38b930aa4f2c(替换为自己的容器id) sudo supervisorctl start ds:example
选择语言为中文,新建文档进行测试
到这里onlyoffice就算安装好了!
二、minio
minio介绍
MinIO 是一款基于Go语言的高性能对象存储服务,在Github上已有28K+Star。它采用了Apache License v2.0开源协议,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。
docker安装
- 首先下载MinIO的Docker镜像
docker pull minio/minio
- 下载完成后使用如下命令运行MinIO服务,注意使用
--console-address指定MinIO Console的运行端口(否则会随机端口运行)
docker run -p 9090:9000 -p 9001:9001 --name minio \
-v /mydata/minio/data:/data \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
-d minio/minio server /data --console-address ":9001"
- 运行成功后就可访问MinIO Console的管理界面了,输入账号密码
minioadmin:minioadmin即可登录,访问地址:http://你的ip:9090
到这里minio也就安装好了,具体minio的使用可以自行搜索学习一下。
三、sprinboot整合实现文档在线编辑
1.整体流程
2.后端集成
主要有两个接口集成onlyoffice的在线协同编辑功能
1. /edit 此接口是返回给前端打开onlyoffice的编辑界面需要的参数
-
key参数,是一个文档能否多人协同编辑的一个关键点,当多人同时操作同一个文档时,需要保证此文档的key值的唯一。
-
downloadUrl参数就是下载文件接口的路径,是提供给onlyoffice下载文件的。
-
callbackUrl参数是文档编辑完成后的回调,编辑完成之后保存最新文档,并将最后结果返回给onlyOffice服务器,onlyoffice服务器需要我们的服务器给它响应为 {"error":0}的响应结果来通知服务器此文档没有问题,否则刚开始无法正常编辑文档。
2. /callback 接口是onlyoffice服务器对于应用服务的回调接口,当打开文档时,编辑完成后保存文档,或是正在编辑时,下载文档调用onlyoffice的强制保存命令之后都会回调这个接口。
回调接口会有多种状态值(status),可分别做不同的处理
0 - no document with the key identifier could be found,
1 - document is being edited,
2 - document is ready for saving,
3 - document saving error has occurred,
4 - document is closed with no changes,
6 - document is being edited, but the current document state is saved,
7 - error has occurred while force saving the document
需要注意的是status 等于1,必须给onlyoffice的服务返回{"error":"0"}的信息,这样onlyoffice会认为回调接口是没问题的,这样就可以在线编辑文档了,否则的话会弹出窗口说明在线编辑还没有关闭。前端有人下载文档时,强制保存最新内容 当status 是6时说明有人在编辑时下载文档。
当我们关闭编辑窗口后,十秒钟左右onlyoffice会将它存储的我们的编辑后的文件,此时status = 2,通过request发给我们,我们需要做的就是接收到文件然后回写该文件。定义要与文档存储服务保存的编辑文档的链接。当状态值仅等于2或3时,存在链路。