SpringBoot中整合ONLYOFFICE在线编辑

SpringBoot整合OnlyOffice实现在线编辑

公司有一个需求,就是实现 *Word* , *Excel* ,等文件的在线编辑,市场上面进行了多方面的选型,考虑了 *[OpenOffice](https://openoffice.apache.org/)* , *[Office Online](https://www.microsoft.com/zh-cn/microsoft-365/free-office-online-for-the-web?legRedir=true&CorrelationId=13c8a865-b9b0-48ff-b3ed-3ea9ec31cd55)*, 但是最终还是选择了 *[OnlyOffice](https://www.onlyoffice.com/zh/)* 这个产品。
他的一个很大的优势在于开源,支持协同,社区比较活跃。api比较全面,还有中文的文档。还有一点比较好的就是支持协同,并且支持协同,虽然协同在社区版中存在限制,但是支持代码修改,可以重新编译。社区的大佬很多,很赞。唯一遗憾的就是效率比较低,在使用私有对象存储的时候存在延迟。其他的没有使用到,所以不进行评论。中文文档:[https://api.onlyoffice.com/zh/editors/basic](https://api.onlyoffice.com/zh/editors/basic)

1. 搭建私有的OnlyOffice的服务

搭建过程这里就不进行涉猎了,建议使用docker进行搭建,下载官方镜像包即可,(现在dockerhub被墙,自行解决,不建议自己再次打包,因为我在尝试的时候总是出现莫名奇妙的问题可能是我的问题。推荐使用官网原版镜像)。根据官方文档一步步操作即可。搭建过程中,如果是自己玩建议不要开启 **JWT** ,生产环境建议开一下。但是开的成本就是你对接的时候需要获取token然后在进行交互。

2. SpringBoot进行交互

2.1 环境

java: 17
boot: 3.0.5
页面:一个h5页面即可
需要的其他依赖

<!-- ... 其他的依赖自行添加即可,不重要,比如 fastjson2,jackson 等 -->

<!-- 这个JAR 主要的作用是与OnlyOffice交互的时候生成token使用的 -->
<dependency>
     <groupId>com.inversoft</groupId>
     <artifactId>prime-jwt</artifactId>
     <version>1.3.1</version>
 </dependency>
        

2.2 我们的流程

我们使用一个 H5 页面即可,页面通过加载一个 app.js 。然后通过一个 config 进行渲染,就可以实现一个编辑。app.js 是核心js文件

  1. only office 我只使用他的一个编辑的功能(这是一个核心,就是编辑文件,文件的来源和存储与它无关)
  2. 被编辑的文件从哪里获取?从 config 对象中的配置获取,这里就需要自行实现。
  3. 编辑后的文件如何获取?config对象中有一个回调地址,这个地址会给到服务器一个编辑的状态,并且携带一个获取编辑后文件的url(这个url就是only office 服务中的一个文件下载地址),根据这个url来获取编辑后的文件。然后在对这个文件进行存储。
    回调的实现参考:https://api.onlyoffice.com/zh/editors/callback#status

在这里插入图片描述

2.3 接口规划

一共设计三个接口,

  1. 获取编辑器的配置
  2. 获取需要编辑的文件流
  3. 编辑后保存文件的回调
    保存后的文件:注意,这里编辑后的文件并不是在回调里面以流的形式给,而是在回调接口里面给服务器一个状态,根据状态去获取一个下载编辑后文件的一个地址,然后根据地址去主动的获取文件。
2.3.1 获取编辑器配置的接口

/**
 * 被编辑文件的下载连接
 * 这里就是自己服务的配置地址
 * only office 调用你的服务的地址,一定是 onlyoffice服务可以ping通的你的项目地址。ping不通=白搭
 */
@Value("${only.office.downUrl}")
private String downFileUrl = "";
/**
 * 这里是回调地址:例如 http://192.168.0.10:8080/office/edit/callback/{fileId}
 * 自行定义即可(就是后面自己编写的接口,但是一定要通可onlyoffice服务互通)
 * only office 调用你的服务的地址,一定是 onlyoffice服务可以ping通的你的项目地址。ping不通=白搭
 */
@Value("${only.office.callBackUrl}")
private String editCallBackUrl = "";

@Operation(summary = "根据文件的ID来获取在线编辑的配置和token")
@PostMapping("/token/{fileId}")
@Parameters({
   
   
        @Parameter(name = "fileId", description = "不是对象ID是文件的ID", in = ParameterIn.PATH)
})
public ResultVo<?> getToken(@PathVariable String fileId) {
   
   
    String fileKey ;
    if (redisUtil.hHasKey(RedisName.ONLY_OFFICE_FILE_KYE,fileId)) {
   
   
        fileKey = redisUtil.hget(RedisName.ONLY_OFFICE_FILE_KYE,fileId).toString();
        //return ResultVo.error(CustomExceptionType.ONLY_OFFICE_COORDINATION_ERROR);
    }else{
   
   
        fileKey = fileId + RandomUtil.randomNumbers(10);
    }
    String json = """
            {
                "document": {
  
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值