springboot整合onlyoffice,minio实现文档在线预览编辑

7,592 阅读4分钟

项目整体设计思路为使用onlyoffice做文档预览编辑服务,文件存储使用minio,后端使用springboot集成,数据库为mysql,文章主要包含以下三块内容:

  1. onlyoffice安装
  2. minio安装
  3. 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

检查安装是否成功

第一种方式:命令行中

image.png

第二种方式:浏览器中(http://你的ip:20053/welcome/)

image.png

安装测试实例

sudo docker exec 38b930aa4f2c(替换为自己的容器id) sudo supervisorctl start ds:example

image.png

选择语言为中文,新建文档进行测试

image.png

到这里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

image.png

到这里minio也就安装好了,具体minio的使用可以自行搜索学习一下。

三、sprinboot整合实现文档在线编辑

1.整体流程

image.png

2.后端集成

主要有两个接口集成onlyoffice的在线协同编辑功能

image.png

1. /edit 此接口是返回给前端打开onlyoffice的编辑界面需要的参数

image.png

image.png

  • 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时,存在链路。