当前位置:   article > 正文

简单使用OnlyOffice_onlyoffice使用教程

onlyoffice使用教程

1 参考网址

# 英文版
https://www.onlyoffice.com
# 中文版
https://www.onlyoffice.com/zh/

# GitHub上的地址
https://github.com/ONLYOFFICE/DocumentServer

# 社区版Docker安装
https://helpcenter.onlyoffice.com/installation/docs-community-install-docker.aspx

# DockerHub地址
https://hub.docker.com/r/onlyoffice/documentserver

# 开发文档
https://api.onlyoffice.com/editors/basic

# 后端参考的demo
https://api.onlyoffice.com/editors/demopreview

# 前端参考的配置地址
https://api.onlyoffice.com/editors/config/editor#createUrl
# 前端自定义编辑参数
https://api.onlyoffice.com/editors/config/editor/customization
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

2 Docker安装OnlyOffice

2.1 安装onlyoffice

# 下载onlyoffice/documentserver:7.1.1
sudo docker pull onlyoffice/documentserver:7.1.1

# 创建Onlyoffice容器
# 对外端口81
sudo docker run -itd \
--name my_onlyoffice \
--restart=always \
-p 81:80 \
-v /home/onlyoffice/logs:/var/log/onlyoffice  \
-v /home/onlyoffice/data:/var/www/onlyoffice/Data  \
-v /home/onlyoffice/lib:/var/lib/onlyoffice \
-v /home/onlyoffice/db:/var/lib/postgresql  \
onlyoffice/documentserver:7.1.1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2.2 查看服务

默认会跳转到欢迎页面,"192.168.108.200"是我的地址

http://192.168.108.200:81/
  • 1

在这里插入图片描述

2.3 参数说明

Status返回值说明

https://api.onlyoffice.com/editors/callback#status-descr
  • 1
status描述
1每次用户连接到文档协同编辑或断开文档协同编辑时,都会收到该消息。
2,3关闭正在编辑的文档10秒钟后,会收到该消息,用户的标识符是最后一个向文档编辑服务发送更改的用户。
4在最后一个用户关闭文档时收到。
6,7在执行强制保存请求时收到。

3 前端代码

注意:容器的宿主机与开发电脑需要在同一个局域网中,保证前端访问后端的IP地址能够访问到。

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>OnlyOffice</title>
</head>
<body style="height:800px">
    <div id="placeholder"></div>

    <script type="text/javascript" src="http://192.168.108.200:81/web-apps/apps/api/documents/api.js"></script>
    <script type="text/javascript">
        var config = {  

            // 设置文档信息
            "document": {
                "fileType": "docx",
                // 文档唯一标识,最大长度128
                "key": "Khirz6zTPdfd7",
                // 文档名称
                "title": "Example Document Title.docx",
                // 文件地址
                "url": "http://192.168.108.1:8080/office/online",
                // 添加权限
                "permissions": {
                    // 设置聊天
                    "chat": true
                }
            },

            // 设置编辑
            "editorConfig": {
                // 设置语言
                "lang": "zh-CN",

                // 两种编辑(edit)和查看(view)
                "mode": "edit",
                // 文件保存时的地址
                "callbackUrl": "http://192.168.108.1:8080/office/save",

                /*
                // 配置用户信息
                "user": {
                    // 用户编号
                    "id": "admin",
                    // 用户名称
                    "name": "管理员"
                },
                */

            },
        };
        var docEditor = new DocsAPI.DocEditor("placeholder", config);
        
    </script>
</body>
</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

4 SpringBoot使用OnlyOffice

4.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.mason</groupId>
	<artifactId>myonlyoffice</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>myonlyoffice</name>
	<description>myonlyoffice project for Spring Boot</description>
	<properties>
		<java.version>11</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.alibaba.fastjson2</groupId>
			<artifactId>fastjson2</artifactId>
			<version>2.0.10</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>
  • 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

4.2 java代码

package com.mason.myonlyoffice.controller;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.springframework.stereotype.Controller;

import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;


@Controller
@ResponseBody
@RequestMapping("/office")
public class EditorController {


    @GetMapping("/online")
    public void online(HttpServletResponse response, HttpServletRequest request) {
        try {
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/octet-stream");

            // 读文件输入流
            String filePath = "E:\\onlyoffice.docx";
            InputStream inputStream = new FileInputStream(filePath);

            // 复制文件流
            StreamUtils.copy(inputStream, response.getOutputStream());

            // 关闭输入流
            inputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    @PostMapping(path = "/save")
    public void save(HttpServletResponse response, HttpServletRequest request) {

        try {
            // 获得response信息
            PrintWriter writer = response.getWriter();

            // 获取数据文件信息
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            StreamUtils.copy(request.getInputStream(), byteArrayOutputStream);
            String fileInfoStr = byteArrayOutputStream.toString();
            byteArrayOutputStream.close();

            if (fileInfoStr.isEmpty()) {
                writer.write("request的输入流为空");
                return;
            }

            System.out.println(fileInfoStr);

            // 转化字符串对象转化为JSON对象
            JSONObject fileInfoObj = JSON.parseObject(fileInfoStr);

            // 获取编辑文件的状态
            int status = (Integer) fileInfoObj.get("status");
            int saved = 0;

            // 关闭正在编辑的文档10秒钟后,会收到该消息
            if(status == 2 || status == 3) {
                // 获取文件数据
                try {
                    URL url = new URL((String) fileInfoObj.get("url"));
                    java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();
                    InputStream inputStream = connection.getInputStream();

                    if (inputStream == null){
                        throw new Exception("Stream is null");
                    }

                    // 保存编辑后的数据
                    String path = "E:\\onlyoffice.docx";
                    File file = new File(path);

                    // 复制数据流
                    FileOutputStream outputStream = new FileOutputStream(file);
                    StreamUtils.copy(inputStream, outputStream);

                    // 关闭数据资源
                    outputStream.close();
                    inputStream.close();
                    connection.disconnect();
                } catch (Exception ex) {
                    saved = 1;
                    ex.printStackTrace();
                }
            }

            System.out.println("保存文件成功");
            writer.write("{\"error\":" + saved + "}");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}
  • 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

5 截图

在这里插入图片描述

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

闽ICP备14008679号