廢話不多說,能看到這篇文章的,多半對自己的需求已經很明確了,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
在線拉取onlyoffice鏡像
執行以下命令即可拉取鏡像,下載過程需要一點時間:
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部署成功了。
離線方式安裝Onlyoffice
鏈接:https://pan.baidu.com/s/1ICyyFV3WiYdx1cW8xtICzA
提取碼:0m19
docker安裝
準備docker的依賴(下載docker.zip解壓即可)。
安裝依賴時忽略依賴,將docker文件夾中的所有rpm進行安裝:
rpm ivh docker/* --nodeps --force
安裝好後,啓動docker
systemctl daemon-reload
systemctl enable docker
systemctl start docker
導入onlyoffice鏡像
注:上面的壓縮包裏面的鏡像是我處理過的鏡像,你可以下載乾淨的鏡像做同樣的操作
設置enforce:setenforce 0
導入鏡像:
docker load < onlyoffice_ch_http.tar
後臺啓動:
docker run -i -t -d -p 80:80 onlyoffice/ch-en-http
一個demo
官網上有一個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添加刪除字體