废话不多说,能看到这篇文章的,多半对自己的需求已经很明确了,OnlyOffice能干什么就不描述了,上干货。
centos 7+docker,本文是以docker的形式进行onlyoffice部署,docker的方式比较简单。
下面这个是onlyoffice给出的环境要求
CPU: dual core 2 GHz or better
RAM:2 GB or more
HDD:at least 40 GB of free space
Additional requirements:at least 4 GB of swap
OS:amd64 Linux distribution with kernel version 3.10 or later
Additional requirements
Docker: version 1.10 or later
执行以下命令即可拉取镜像,下载过程需要一点时间:
sudo docker run -i -t -d -p 80:80 --restart=always onlyoffice/documentserver
该命令拉取镜像后,onlyoffice已经启动了一个容器了。不过只映射了http的80端口,没有启动https,https的配置这里就不讲了,请参考官方文档;
浏览器访问:http://yourip/web-apps/apps/api/documents/api.js 你能看到以下页面就证明你的onlyoffice部署成功了。
链接:https://pan.baidu.com/s/1ICyyFV3WiYdx1cW8xtICzA
提取码:0m19
准备docker的依赖(下载docker.zip解压即可)。
安装依赖时忽略依赖,将docker文件夹中的所有rpm进行安装:
rpm ivh docker/* --nodeps --force
安装好后,启动docker
systemctl daemon-reload
systemctl enable docker
systemctl start docker
注:上面的压缩包里面的镜像是我处理过的镜像,你可以下载干净的镜像做同样的操作
设置enforce:setenforce 0
导入镜像:
docker load < onlyoffice_ch_http.tar
后台启动:
docker run -i -t -d -p 80:80 onlyoffice/ch-en-http
官网上有一个springmvc+jsp的demo,这里就不讲了,讲下我的简单demo:
一个html+2个接口:
demo.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<style>
html,body{width:100%;height: 100%;}
#placeholder{
height: 100%;
}
</style>
<body>
<div id="placeholder" ></div>
<script type="text/javascript" src="http://172.27.13.138:7000/web-apps/apps/api/documents/api.js"></script>
<script>
//这个配置在api.js里面有详细描述
var config = {
"type": "desktop",
"width": "100%",
"height": "100%",
"documentType": "text",
"document": {
"title": "demo.doc",
//该url是onlyoffice下载文档的路径,注意这个url是onlyoffice容器可达的路径,不然你打开office会告诉你下载不了。
//留个问题:我在主机上启动文件下载服务,onlyoffice在docker里面,然后用虚拟ip段的192.168.206.1作为服务ip,在虚拟机里面肯定能ping通,并且也能正常访问url
//,但是onlyoffice却无法下载文件,这是什么问题,请知道的大佬留言告知下。
"url": "http://172.27.13.188:7071/document/file/04cb6872e62c495c8708db06897ed618",
"fileType": "doc",
//key是onlyoffice下载文档格式化后存储到onlyoffice里面的key值,下次读取相同key值得文档时,不会再通过url加载。
"key": "14c2872e62c495c8708db06897ed618",
"info": {
"owner": "[email protected]",
"uploaded": "2020-01-03T02:28:28.000+0000"
},
//一些授权,都能懂得
"permissions": {
"edit": true,
"download": false,
"review": true,
"print": true,
"changeHistory": false,
"comment": true,
"modifyFilter": true,
"modifyContentControl": true,
"fillForms": true
}
},
"editorConfig": {
"mode": "edit",
//en-ch 英文模式/zh-CN 中文模式,onlyoffice自身支持汉化,不存在网上那些加入字体后汉化的说法(我的版本是5.4.2-46),加入字体是在编辑文档的时候用的,后续会讲到
"lang": "zh-CN",
"location": "zh-CN",
"canCoAuthoring": false,
//文档编辑的回调,在编辑完成后,关闭该页面后的10S左右,onlyoffice服务会通过该接口将编辑后的文档流推送过来
"callbackUrl": "http://172.27.13.188:7071/document/callback/?id=04cb6872e62c495c8708db06897ed618",
"user": {
"id": "zs",
"name": "張三"
},
"customization": {
"chat": true,
"comments": true,
"zoom": 100,
"compactToolbar": false,
"leftMenu": false,
"rightMenu": false,
"hideRightMenu": true,
"toolbar": true,
"statusBar": true,
"autosave": true,
"forcesave": false,
"commentAuthorOnly": false,
"showReviewChanges": false,
"help": false,
"compactHeader": false,
"toolbarNoTabs": false,
"reviewDisplay": "original"
},
},
}
//点睛之笔
var docEditor = new DocsAPI.DocEditor("placeholder", config);
</script>
</body>
</html>
所需的两个接口就在上面的html里面,下载文档的接口怎么写就不说了,不知道的面壁去。
callbackUrl:
注意几点:
1.接口是post
2.在页面打开的时候,页面会调用回调接口,传参status = 1,此时需要回调接口返回{“error”:“0”},0表示回调接口没问题,可以正常使用,这个样在后面关闭编辑页面后才会调用该接口。
@PostMapping("callback")
public JSONObject callback(HttpServletRequest request, HttpServletResponse response) {
JSONObject result = new JSONObject();
try {
String body = "";
Scanner scanner = new Scanner(request.getInputStream());
scanner.useDelimiter("\\A");
body = scanner.hasNext() ? scanner.next() : "";
scanner.close();
if (body.isEmpty())
{
result.put("msg","empty request.getInputStream");
}
JSONObject jsonObj = JSON.parseObject(body);
int status = (Integer) jsonObj.get("status");
int saved = 0;
if(status == 2 || status == 3) //MustSave, Corrupted
{
String downloadUri = (String) jsonObj.get("url");
try
{
URL url = new URL(downloadUri);
java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();
InputStream stream = connection.getInputStream();
if (stream == null)
{
throw new Exception("Stream is null");
}
String path = request.getParameter("path");
File savedFile = new File(upload_file_path+"/"+path);
try (FileOutputStream out = new FileOutputStream(savedFile))
{
int read;
final byte[] bytes = new byte[1024];
while ((read = stream.read(bytes)) != -1)
{
out.write(bytes, 0, read);
}
out.flush();
}
connection.disconnect();
}
catch (Exception ex)
{
saved = 1;
ex.printStackTrace();
}
}
result.put("error",saved);
} catch (IOException e) {
result.put("error",-1);
}
return result;
}
至此,office文档在线预览,编辑的环境部署完成。
下一篇文章讲解如何给onlyoffice添加字体,目前onlyoffice有一抹多不明所以的字体:
传送门:onlyoffice添加删除字体