Java实现Office文件预览
一、核心技术栈:使用开源技术ONLYOFFICE办公套件,官网地址:【ONLYOFFICE API 文档 - 基本概念】
二、环境搭建:
本篇使用docker为例进行ONLYOFFICE环境部署,docker安装可自行学习,本文不做介绍
1、拉取镜像
执行以下命令,可自定义拉取的版本,本文使用7.5.1.23版本,默认拉取当前最新镜像
docker pull onlyoffice/documentserver
2、创建容器
执行以下命令
docker run -i -t -d -p 8013:80 --name documentserver --restart=always -e JWT_ENABLED=false -v /data/onlyoffice/DocumentServer/logs:/var/log/onlyoffice -v /data/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data -v /data/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice -v /data/onlyoffice/DocumentServer/db:/var/lib/postgresql onlyoffice/documentserver
3、启动演示项目
sudo docker exec 容器id sudo supervisorctl start ds:example
浏览器访问容器8013端口 http://127.0.0.1:8013 即可看到项目演示用首页,如下图:
4、配置域名
https域名代理onlyoffice时需要在location里加如下配置
proxy_redirect http:// $scheme://;
proxy_set_header X-Forwarded-Proto $scheme;
否则会提示
This request has been blocked; the content must be served over HTTPS.
5、可能会遇到的问题
- Onlyoffice显示文档安全令牌的格式不正确,解决方法,在重启创建命令加上以下参数
-e JWT_ENABLED=false -e USE_UNAUTHORIZED_STORAGE=true -e ONLYOFFICE_HTTPS_HSTS_ENABLED=false
- Onlyoffice下载文件失败问题
查看日志:docker中对应位置
/var/log/onlyoffice/logs/documentserver/converter/out.log,创建容器的时候,已经将此目录挂在到宿主机
/data/onlyoffice/DocumentServer/logs,发现出现以下错误
Error: DNS lookup xxx.xxx.xxx.xx(family:undefined, host:undefined) is not allowed. Because, It is private IP address.
解决方法:编辑Onlyoffice配置文件允许私有IP通过,docker中配置文件路径
/etc/onlyoffice/documentserver/default.json,修改以下参数
"request-filtering-agent" : {
"allowPrivateIPAddress": true,
"allowMetaIPAddress": true
},
也可以在宿主机上将文件复制出来进行编辑,然后再上传至容器
docker cp onlyoffice:/etc/onlyoffice/documentserver/default.json ./
vim default.json
docker cp ./default.json onlyoffice:/etc/onlyoffice/documentserver/default.json
不管用哪一种方式,修改了容器参数,需要重启容器,才能生效;至此ONLYOFFICE环境已经搭建完成
6、JAVA使用ONLYOFFICE预览office文件
JAVA开发一个Controller控制器,请求视图指向目标页面,html编码示例如下
${title}预览
预览效果如下
7、注意事项
- 在配置onlyoffice反向代理时,要用upstream,并且upstream的名字要和server块中的server_name名字保持一致
- 预览乱码的问题,一般都是缺少字体
- PDF和图片预览一般建议使用pdf.js
自己使用过程的经验仅供参考,希望可以帮助到大家,谢谢