当前位置:   article > 正文

onlyoffice的安装使用_onlyoffice docker

onlyoffice docker

一、镜像安装:用OnlyOffice提供的Docker镜像安装OnlyOffice是比较方便和推荐的方法,因为它可以自动配置OnlyOffice的所有依赖项,从而减少安装和配置的复杂度。

  1. 首先需要安装Docker,可以参考官方文档进行安装:https://docs.docker.com/engine/install/
  2. 安装完Docker后,可在终端中通过命令sudo docker run --net host -i onlyoffice/documentserver下载OnlyOffice的Docker镜像,在安装过程中可以根据需要自定义一些参数,例如指定文件存储路径、指定管理员账号等。
  3. 等待下载完成后,使用命令sudo docker ps查看已启动的容器,可以看到OnlyOffice服务已经运行起来了。
  4. 接下来,通过浏览器访问http://服务器IP:端口号/,即可进入OnlyOffice服务管理页面,输入管理员账号和密码进行登录。
  5. 在管理页面中,可以管理用户、添加文档库、设置文档类型等,同时也可以将OnlyOffice与其他系统整合。

二、脚本安装:如果您不想使用Docker镜像,或者环境不允许,也可以通过以下方式安装OnlyOffice。

  1. 使用安装脚本进行安装

OnlyOffice提供了一个安装脚本,可以自动下载和安装所有必要的依赖项,并配置OnlyOffice服务。使用该方法安装OnlyOffice可以按照以下步骤进行操作:

  • 下载安装脚本
wget http://download.onlyoffice.com/install/install.sh
  • 1
  • 将安装脚本赋予可执行权限并执行
sudo chmod +x install.sh
sudo ./install.sh
  • 1
  • 2
  • 在脚本执行期间,您需要回答几个问题以配置OnlyOffice服务

如果您希望卸载OnlyOffice服务,可以运行以下命令:

sudo apt-get remove onlyoffice-doc* onlyoffice-communityserver*
sudo apt-get autoremove
  • 1
  • 2
  1. 从源代码编译安装

如果您是开发人员或对OnlyOffice的源代码进行修改,则可以从源代码手动编译和安装OnlyOffice。这种方法需要下载OnlyOffice的源代码和编译器,需要一些专业的技能和经验。

总而言之,使用Docker镜像是只使用OnlyOffice最简单的方式,但是如果您不想使用Docker镜像,使用安装脚本或从源代码编译安装OnlyOffice也是可行的。

安装好的页面长这样:

在这里插入图片描述

或者长这样

img

三、前端代码以最最简单的html为例

<!DOCTYPE html>
<html lang="en">


<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>在线预览</title>
</head>

<body>

	<div class="form" style="width:100%;height:800px;">
        <div id="iframeEditor"></div>
    </div>

</body>

<script type="text/javascript"  src="./jquery-3.7.0.min.js"></script>
<script type="text/javascript" >


$(function() {
	// 获取onlyoffice 路径
	var onlyoffice_url = "http://192.168.1.106:32774/";
	var onlyoffice_js = onlyoffice_url + "/web-apps/apps/api/documents/api.js";
	loadJS(onlyoffice_js, function() {
				var fileType =  "docx";
				var fileName = "222.docx";
				var key = "1111";//每次打开后要重新获取,否则编辑后打开还是编辑前的文件,如果是预览文件就没关系
				var mode = "edit";//view查看
				var url = "http://192.168.1.144:9088/onlyoffice_filePath/222.docx";
				//编辑保存回调函数,保存的文件可以覆盖原来的文件,也可以新生成 (保证此接口是通的否则,文件显示不出来)
				var callbackUrl = "http://192.168.1.102:9088/xxxxxx/CallBackServlet?fileName=222.docx";
				var documentType = getDocumentType(fileType);
				var config = {};
				
				// 预览
				if ("edit" == mode) {
					config = {
						document : {
							fileType : fileType,
							key :key,
							title : fileName,
							url : url
						},
						documentType : documentType,
						editorConfig : {
							callbackUrl : callbackUrl,
							customization : {
								forcesave : true,
								leftMenu : false,
								rightMenu : false,
								chat : true,
								comments : false,
								about : false,
								help : false,
								plugins : false
							},
							user : {
								id : "1",
								name : "用户1"
							},
							hideRightMenu : false,
							mode : mode,
							lang : "zh-CN"
	
						},
						height : "100%",
						width : "100%",
						lang : "zh-CN"
					};
	
				} else {
				
					//文件预览
					config = {
						document : {
							fileType : fileType,
							key : key,
							title : fileName,
							url : url
						},
						documentType : documentType,
						editorConfig : {
							customization : {
								forcesave : false,
								help : false,
								toolbar : false,
								statusBar : false,
								autosave : false,
								leftMenu : false,
								rightMenu : false,
								chat : false,
								comments : false,
								about : false,
								help : false,
								plugins : false,
								spellcheck : false,
								compactHeader : false
							},
							user : {
								id : "2",
								name : "用户2"
							},
							hideRightMenu : true,
							mode : mode,
							lang : "zh-CN"
	
						},
						height : "100%",
						width : "100%",
						lang : "zh-CN"
					};
	
				}
				docEditor = new DocsAPI.DocEditor("iframeEditor", config);
			});
	
	/**
	 * 预览类型转化
	 */
	function getDocumentType(fileType) {
		var ExtsDocument = new Array(".doc", ".docx", ".docm", ".dot", ".dotx",
				".dotm", ".odt", ".fodt", ".ott", ".rtf", ".txt", ".html",
				".htm", ".mht", ".pdf", ".djvu", ".fb2", ".epub", ".xps");
		var ExtsSpreadsheet = new Array(".xls", ".xlsx", ".xlsm", ".xlt",
				".xltx", ".xltm", ".ods", ".fods", ".ots", ".csv");
	
		var ExtsPresentation = new Array(".pps", ".ppsx", ".ppsm", ".ppt",
				".pptx", ".pptm", ".pot", ".potx", ".potm", ".odp", ".fodp",
				".otp");
		fileType = "." + fileType;
		if (ExtsDocument.indexOf(fileType.toLowerCase()) > -1) {
			return "text";
		}
		if (ExtsSpreadsheet.indexOf(fileType.toLowerCase()) > -1) {
			return "spreadsheet";
		}
		if (ExtsPresentation.indexOf(fileType.toLowerCase()) > -1) {
			return "presentation";
		}
	}
	
	
	/**
	*进入页面后动态加载onlyOffice所需要引入的js(实际运用引入js时IP和端口一般不固定)
	*/
	function loadJS(url, callback) {
		var script = document.createElement('script'), fn = callback
				|| function() {
				};
		script.type = 'text/javascript';
		if (script.readyState) {
	
			script.onreadystatechange = function() {
	
				if (script.readyState == 'loaded'
						|| script.readyState == 'complete') {
	
					script.onreadystatechange = null;
					fn();
				}
			};
		} else {
			// 其他浏览器
			script.onload = function() {
				fn();
			};
		}
		script.src = url;
		document.getElementsByTagName('head')[0].appendChild(script);
	}

});

</script>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179

再次强调如果你检查文件路径,onlyoffice服务路径,出现了下面这样的情况不要慌,那就是我说的保存回调函数不通,文件出不来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AO6qaAr2-1686541531242)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230529102358300.png)]

四、后端官网给出的测试代码也很多,我写了个Servlet,使用的时候注意几点,多人协同时状态6,2根据业务可以控制,以及前端的key多人协同,key相同打开就是一样的。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URL;
import java.util.Scanner;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import com.jb.util.platform.Platform;

/**

 * 将编辑后的文件返回保存
   */
   @WebServlet(name = "CallBackServlet", urlPatterns = {"/CallBackServlet"})
   public class CallBackServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;
   private static final String sep = File.separator;
   @Autowired
   private JdbcTemplate jdbcTemplate;

   public CallBackServlet() {
       super();
   }
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, 		IOException {
          PrintWriter writer = null;
          JSONObject jsonObj=null;
           try {
               writer = response.getWriter();
               @SuppressWarnings("resource")
   			Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
               String body = scanner.hasNext() ? scanner.next() : "";
               try {
   				jsonObj = (JSONObject) new JSONParser().parse(body);
   			} catch (org.json.simple.parser.ParseException e) {
   				// TODO Auto-generated catch block
   				e.printStackTrace();
   			}      

               /*
                0-找不到具有密钥标识符的文档,
       			1-正在编辑文档,
       			2-文件已准备好保存,
       			3-发生文档保存错误,
       			4-文件已关闭,没有更改,
       			6-正在编辑文档,但保存了当前文档状态,
       			7-强制保存文档时出错。
                * */         
             
               	if ((long) jsonObj.get("status") == 2) {
                   /*
                    * 当我们关闭编辑窗口后,十秒钟左右onlyoffice会将它存储的我们的编辑后的文件,,此时status = 2,
                    通过request发给我们,我们需要做的就是接收到文件然后回写该文件。
                    * */
                   /*
                    * 定义要与文档存储服务保存的编辑文档的链接。当状态值仅等于2或3时,存在链路。
                    * */
                   String downloadUri = (String) jsonObj.get("url");
                   System.out.println("====文档编辑完成,现在开始保存编辑后的文档,其下载地址为:" + downloadUri);
                   //这里加在即的业务名
                  
                   URL url = new URL(downloadUri);
                   java.net.HttpURLConnection connection = 
                       (java.net.HttpURLConnection) url.openConnection();
                   InputStream stream = connection.getInputStream();
                   //更换为实际的路径
                   String filePath = "D://demo";
               	File path = new File(filePath);
               	File savedFile = new File(filePath+sep+fileName);
                   if(!path.exists()){
                   	path.mkdirs();
                   }
                   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 (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           }
         
   }

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, 	IOException {
   	doGet(request, response);
   }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102

官网明确给出了不同语言,框架的测试代码。例如Java,Java Spring,PHP,Node.js,C#等。

测试代码下载地址:https://api.onlyoffice.com/editors/demopreview?type=text#DemoPreview

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A7FVZhT4-1686541531242)(C:\Users\Administrator\Desktop\技术文档\image-20230529100644728.png)]

以Java为例,使用OnlyOffice SDK进行二次开发的步骤如下:

  • 在项目依赖中添加OnlyOffice SDK
<dependency>
  <groupId>com.onlyoffice.documents</groupId>
  <artifactId>onlyoffice-documentserver-java-sdk</artifactId>
  <version>6.1.3</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 创建OnlyOffice DocumentServer客户端对象
DocumentServerClient client = new DocumentServerClient("http://your-documentserver.com/");
  • 1
  • 请求Token
String token = client.security().requestToken();
  • 1
  • 打开文档(文档的URL和Key需要进行参数替换)
EditorUrl editorUrl = client.editing().buildUrl(new DocumentRequest("document-url", "document-key"))
        .editable()
        .setToken(token)
        .build();
  • 1
  • 2
  • 3
  • 4

对于二次开发者而言,OnlyOffice API和SDK的使用难度并不大,并且提供了丰富的文档和示例来帮助开发者快速上手。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/533653
推荐阅读
相关标签
  

闽ICP备14008679号