Office Online Server 在线编辑Office文档,安装部署

本文档详细记录了在WindowsServer2012R2上搭建OfficeOnlineServer的过程,包括服务器环境准备、域控服务器与转换服务器的配置、OfficeOnlineServer的安装与相关设置,以及如何实现在线编辑预览功能。此外,还提到了外部网络访问服务的配置和端口映射。
摘要由CSDN通过智能技术生成

最近公司项目需求,需要搭建一个office预览编辑的服务,在网上找到了Office Online Server在线编辑office文档,以下把自己搭建过程记录

一、Office Online Server介绍

Office Online Server是 Office Web Apps Server 的升级版本,安装环境必须为两台Windows Server 2012 R2 或 Windows Server 2016服务器(注意,Windows Server 2016 需要 Office Online Server 2017 年 4 月或更高版本。)。一台做转换服务器(安装 Office OnlineServer 2016 软件,除此之外不能安装与office相关的其他程序),一台做域控服务器(转换服务器只有加在域下才能被访问,同时项目部署服务器只有加在域控服务器下才能访问转换服务器)。最好将Office Online Server部署在一台干净的服务器上,而且该服务器必须在域中。

注意事项:

请勿在运行 Office Online Server 的服务器上安装任何其他服务器应用程序。包括 Exchange Server、SharePoint Server、Skype for Business Server 和 SQL Server。如果服务器不足,则可以在这些服务器的其中一台的虚拟机上运行 Office Online Server。

不要在端口 80、443 或 809 上安装依赖 Web 服务器 (IIS) 角色的任何服务或角色,因为 Office Online Server 会定期删除这些端口上的 Web 应用程序。

不要安装任何版本的 Office。如果已经安装,在安装 Office Online Server 之前必须将其卸载。

不要在域控制器上安装 Office Online Server。它不会在包含 Active Directory 域服务 (AD DS) 的服务器上运行。

二、准备工作

**加粗样式

Windows Server 2012 R2安装包
在这里插入图片描述
我的做法:由于自己先在本机调试,搭建一个demo,所以安装了一台虚拟机,在虚拟机上打开两台Windows Server 2012 R2
在这里插入图片描述
虚拟机安装教程:https://www.maxiaobang.com/4343.html

三、部署域控服务器

开启第一台虚拟机(192.168.126.128),并打开服务器管理器
1、第一步
在这里插入图片描述
2、第二步
在这里插入图片描述
3、添加角色和功能
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
继续下一步直到
在这里插入图片描述

安装这一步会有可能出现以下问题
提示:
请求添加或删除指定服务器上的功能失败。无法完成操作,因为指定的服务器需要重新启动。

解决方式:
1、右击我的电脑-属性,高级系统设置-高级-设置-高级-虚拟内存 更改。将虚拟内存分配提高4GB以上;
2、开始-服务-启动Remote Registy;
在这里插入图片描述

3、重启服务器再安装。
在这里插入图片描述
在这里插入图片描述
填写密码,下一步 ;密码:wisesoft

在这里插入图片描述
提示DNS无法创建,不用管,继续下一步;

在这里插入图片描述
自动填写(NetBIOS),下一步;
在这里插入图片描述
在这里插入图片描述
点击安装,安装完成后重启系统即可
在这里插入图片描述

四、搭建Office Online Server转换服务器

开启第二台虚拟机(192.168.126.129)

将Office Online Server服务器加入域服务器

打开控制面板->网络和Internet->网络和共享中心,并点击更改适配器设置
在这里插入图片描述
右击网络并打开属性,双击IPV4
在这里插入图片描述
将DNS服务器配置为刚才配置好的域控服务器IP【192.168.126.128】
在这里插入图片描述
更改计算机名称加入域

右键电脑,点击属性,点击高级系统设置

在这里插入图片描述
选择域,并输入之前域控服务器中配置的根域名
在这里插入图片描述
在上面这一步有可能会出现以下问题(如果没有请忽略)
Windows server 2012 R2 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同。”
使用克隆的系统时,加域是出现如下问题。“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同。”
在这里插入图片描述
问题原因;
Windows使用SID来表示所有的安全对象(security principals)。安全对象包括主机,域计算机账户,用户和安全组。名字Name是用来代表SID的一个方法,可以允许用户改名儿无需更新ACL(access control list)。SID是一串数字代码包含了架构版本数字,一个48位的ID权威值,一个32位的子全位置或者RID值。权威值识别颁发出SID的代理,这个代理一般是windows 本地系统或者域。子权威值识别颁发权威的委派,RID则是Windows用来创建唯一SID用到的一个普通SID。

相同SID在单机使用过程中可能没有什么问题。但是在Windows内部,每个账号具有一个惟一的Security ID,可以在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion \ProfileList看到。

SID是用来识别账户的惟一标志,而不是通常以为的机器名\用户名。

而现有的克隆虚拟机是把整个安装好的系统分区直接克隆下来,这样多台机器就有了相同的SID,这样在你加入域的时候,会报错,工作不正常。

修改办法:打开克隆完的虚拟机:windows/System32/Sysprep/Sysprep.exe 勾选generalise选项即可。
在这里插入图片描述

输入域服务器管理员账号密码
在这里插入图片描述
zai
出现欢迎界面表示加入域成功
在这里插入图片描述
重启该虚拟机!

重启后,成功配置域环境

在这里插入图片描述
将组件修复功能启用

WIN+R,输入“gpedit.msc”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
刷新组策略,打开“PowerShell”,输入“gpupdate / force”,刷新;
在这里插入图片描述

五、在域控服务器中添加服务器

打开域控服务器,点击管理 > 添加服务器,输入转换服务器修改后的计算机名称,立即查找。将搜索到的服务器双击添加到右边,点击确定。

在这里插入图片描述
在这里插入图片描述
在域控服务器中,所有服务器显示两台服务器,并都是联机状态则表示成功
(不过我在自己服务器则这一步一台服务器没有连接成功,但是也可以)
在这里插入图片描述

六、在Office Online Server转换服务器上安装Office Online Serve

1、打开 Microsoft PowerShell 提示符,然后运行此命令示例来安装必需的角色和服务

如果是:Windows Server 2012 R2
Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,Web-Default-Doc,Web-Static-Content,Web-Performance,Web-Stat-Compression,Web-Dyn-Compression,Web-Security,Web-Filtering,Web-Windows-Auth,Web-App-Dev,Web-Net-Ext45,Web-Asp-Net45,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Includes,InkandHandwritingServices,NET-Framework-Features,NET-Framework-Core,NET-HTTP-Activation,NET-Non-HTTP-Activ,NET-WCF-HTTP-Activation45,Windows-Identity-Foundation,Server-Media-Foundation

安装完成
在这里插入图片描述
2、安装必备软件

1、.NET Framework 4.5.2
https://download.csdn.net/download/qq_34288630/19794521

2、Visual C++ Redistributable Packages for Visual Studio 2013
https://download.csdn.net/download/qq_34288630/19794460

3、Visual C++ Redistributable for Visual Studio 2015

https://download.csdn.net/download/qq_34288630/19794502
4、Microsoft.IdentityModel.Extention.dll

https://download.csdn.net/download/qq_34288630/19794551
2.1、安装Microsoft .NET Framework4.5.2

在这里插入图片描述
在这里插入图片描述
2.2、安装Visual C++ Redistributable Packages for Visual Studio 2013

在这里插入图片描述
2.3、安装Visual C++ Redistributable for Visual Studio 2015

在这里插入图片描述

2.4、安装Microsoft.IdentityModel.Extention.dll

在这里插入图片描述
3、安装office online sevrer 2016
office online sevrer 2016安装包下载地址

在这里插入图片描述
在这里插入图片描述
按照提示继续,到安装成功。

安装中文语言包
下载地址

在这里插入图片描述

七、相关配置

1、配置Office Online Server

打开PowerShell,输入:

启动服务场

Import-Module OfficeWebApps

部署服务器场:
xxx.xxx.xxx.xx代表安装Office Online Server的服务器ip地址

New-OfficeWebAppsFarm -InternalURL “http://wisesoftOffice.wisesoft.com” -ExternalUrl “http://xxx.xxx.xxx.xx” -AllowHttp –EditingEnabled

备注:192.168.19.129为当前服务器的IP;http://wisesoftOffice.wisesoft.com 为Office Online Server服务器192.168.19.129中计算机全名称
在这里插入图片描述
在这里插入图片描述
注:如果输入命令报错,请重新启动电脑
在这里插入图片描述

-InternalURL:
--内网浏览地址,http://xx.domin.com 其中 xx表示计算机名 domin.com 表示域名 也可以设置为对应的IP地址
一般是http://office主机名.AD域控地址

-ExternalURL:外网浏览地址

-AllowHttp: 允许80端口访问

-OpenFromUrlEnabled:允许通过url方式进行预览

-CacheLocation: 缓存文件存放路径 默认是C:\ProgramData\Microsoft\OfficeWebApps\Working\d

-CacheSizeInGB: 最大缓存文件大小 单位GB 默认为15GB

测试office online server是否安装部署成功

在office online 的浏览器中输入http://192.168.19.129/hosting/discovery或http://wisesoftOffice.wisesoft.com/hosting/discovery
在这里插入图片描述
输入http://192.168.19.129/op/generate.aspx或者http://wisesoftOffice.wisesoft.com/op/generate.aspx
在这里插入图片描述
注:若http://192.168.19.129/hosting/discovery 能登录,
http://192.168.19.129/op/generate.aspx显示“服务器错误”,
控制台输入Set-OfficeWebAppsFarm -OpenFromUrlEnabled:$true即可访问成功

当然这两个地址在域控服务器上面访问 也是ok 的
在这里插入图片描述
在这里插入图片描述
在第一个文本框中输入:远程服务器文件地址

点击Create Link在第二个文本中生成:在线预览地址,(因为文件时其它服务器的,没有文件操作权限,只能预览,无法编辑)

如下图:
在这里插入图片描述

注意:****我在一台windows主机上安装了两台虚拟机:
一台:域转换服务器
两外一台:office onlie server服务器
其中我用的远程文件试windows主机上的文件,但是这个文件地址在office onlie server服务器上测试的时候不能用windows的ip,需要在host创建域名,通过域名去访问。
也就是下图圈主来的域名对应windows主机的ip。
在这里插入图片描述

注意:虚拟机内存一定要大,起初我用4G的,测试访问文件会报异常,无法访问,原因是内存溢出,因为文件转换还是很费内存的。

八、wopi代码部署实现在线编辑预览

springboot代码下载地址:

idea打开代码,打包jar,在域账号服务器运行

此时的访问office文件接口服务为

http://wisesoftoffice.wisesoft.com/we/wordeditorframe.aspx?&WOPISrc=http://192.168.192.228:8080/wopi/files/2.docx

其中http://192.168.192.228:8080/wopi/files/2.docx 就是wopi代码运行的接口服务,读取文件接口

package com.wisesoft.office.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.wisesoft.office.entity.FileInfo;
import org.apache.tomcat.util.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLDecoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

@RestController
@RequestMapping({"/wopi"})
public class OfficeServerController {
    Logger logger = LoggerFactory.getLogger(OfficeServerController.class);

    @Value("${file.path}")
    private String filePath;
    @GetMapping("/files/{name}")
    public void getFileInfo(HttpServletRequest request, HttpServletResponse response) {
        String uri = request.getRequestURI();
        FileInfo info = new FileInfo();

        try  {
            // 获取文件名, 防止中文文件名乱码
            String fileName = URLDecoder.decode(uri.substring(uri.indexOf("wopi/files/") + 11), "UTF-8");
            if (fileName != null && fileName.length() > 0) {
                File file = new File(filePath + fileName);
                if (file.exists()) {
                    info.setBaseFileName(file.getName());
                    info.setSize(file.length());
                    info.setOwnerId("admin");
                    info.setVersion(file.lastModified());
                    info.setSha256(getHash256(file));
                }
            }

            ObjectMapper mapper = new ObjectMapper();
            response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
            response.getWriter().write(mapper.writeValueAsString(info));
        } catch (Exception e) {
            logger.error("getFileInfo failed, errMsg: {}", e.toString());
            e.printStackTrace();
        }
    }


    @GetMapping("/files/{name}/contents")
    public void getFile(@PathVariable String name, HttpServletResponse response) {
        // 文件的路径
        String path = filePath + name;
        File file = new File(path);
        String filename = file.getName();

        try (InputStream fis = new BufferedInputStream(new FileInputStream(path));
             OutputStream toClient = new BufferedOutputStream(response.getOutputStream())) {
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            // 清空response
            response.reset();

            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" +
                    new String(filename.getBytes("UTF-8"), "ISO-8859-1"));
            response.addHeader("Content-Length", String.valueOf(file.length()));

            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            toClient.write(buffer);
            toClient.flush();
        } catch (IOException e) {
            logger.error("getFile failed, errMsg: {}", e.toString());
            e.printStackTrace();
        }
    }

    @PostMapping("/files/{name}/contents")
    public void postFile(@PathVariable(name = "name") String name, @RequestBody byte[] content) {
        // 文件的路径
        String path = filePath + name;
        File file = new File(path);

        try (FileOutputStream fop = new FileOutputStream(file)) {
            fop.write(content);
            fop.flush();
        } catch (IOException e) {
            logger.error("postFile failed, errMsg: {}", e.toString());
            e.printStackTrace();
        }
    }

    public static String getHash256(File file) {
        String value = "";
        // 获取hash值
        try {
            byte[] buffer = new byte[1024];
            int numRead;
            InputStream fis = new FileInputStream(file);
            //如果想使用SHA-1或SHA-256,则传入SHA-1,SHA-256
            MessageDigest complete = MessageDigest.getInstance("SHA-256");
            do {
                //从文件读到buffer
                numRead = fis.read(buffer);
                if (numRead > 0) {
                    //用读到的字节进行MD5的计算,第二个参数是偏移量
                    complete.update(buffer, 0, numRead);
                }
            } while (numRead != -1);

            fis.close();
            value = new String(Base64.encodeBase64(complete.digest()));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return value;
    }
}

看完代码,可以看看下图
在这里插入图片描述

九、如何外部网络访问office编辑预览服务

虚拟机:一台域控、一台office server
在这里插入图片描述
1、虚拟机端口映射,将officeserver服务器的80端口映射到主机的80端口

注意:保证主机的端口80没被占用

配置好 此时外部网络就可以访问主机里面安装的虚拟机搭建的office server了
在这里插入图片描述

Office Online Server 2016 是一款企业级的在线办公软件解决方案,它为用户提供了一套完整的在线办公工具,可以在Web浏览器中使用Office系列软件,如Word、Excel、PowerPoint等。通过Office Online Server 2016,用户可以以更便捷的方式进行在线协作和共享文件,无论在何时何地,只需要拥有一个可连接互联网的设备。 要下载Office Online Server 2016,首先需要确保你的计算机满足最低系统要求,例如操作系统为Windows Server 2012或更高版本,CPU和内存要求也需满足官方要求。接下来,你可以在Microsoft官方网站上找到可以下载Office Online Server 2016的链接。 在官方网站上,你可以根据自己的需求选择下载适合你的版本,例如标准版或企业版。在点击下载按钮后,系统会提示你选择下载文件的目录,并开始下载Office Online Server 2016安装文件。下载完成后,你可以运行安装程序,按照界面上的提示进行安装。 在安装完成后,你需要进行一些配置,并确保Office Online Server 2016能够与你的本地网络和域名进行正确的连接。你还可以根据需要进行一些额外的设置,如调整用户访问权限等。 总而言之,下载Office Online Server 2016的过程相对简单,只需要满足系统要求,并按照官方指引进行下载安装即可。这样,你就可以在任何时间、任何地点使用Web浏览器访问Office Online Server 2016,进行在线协作和办公了。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值