从0部署Office Web Apps服务,告别第三方处理office包吧


首先先来两张初步搭完实现的效果预热一下。(基于浏览器)

正如我上篇文章使用 PhpSpreadsheet 实现读取写入 Execl可以使用更好的方案来处理office软件,那么开始吧,本篇文章有点长。(我从下班写到现在,中间自己又走了一遍流程)如果有已经实现过的朋友,欢迎出来一起交流,毕竟后面还有很多路要走,

1cf8deb03c1d9a831c6fbebd67cc6b54.png

500f40b4f8f00c8018a32f42be48554e.png

搭建背景

日常业务中,业务场景免不了和office软件打交道,比如查看一些execl.ppt,或者通过程序获取数据,生成execl.....,可能平常大多数人使用的都是第三方包,比如现在用的多的PhpSpreadheet......,第三方包确实提供了很大的便利性,里面封装了很多支持你操作的功能,阅读文档,通过不同的代码来实现你想要的数据格式以及生成最终的文件。但是体验并不是很友好,能不能在不安装客户端的情况下,通过浏览器在线查看编辑execl.word.ppt,这个时候,Office Web Apps(下面统称为OWA)服务就可以派上用场了。


关于OWA

OWA是office服务产品,提供基于浏览器文件查看和编辑服务。适用于产品和服务支持WOPI(到最后实现部分再提这个,现在知道就好),web应用程序开发接口协议。这些产品,称为主机,包括 SharePoint 2013 和 Lync Server 2013。OWA 服务器场可以为多个本地主机提供Office 服务。虽然 OWA 要求不运行任何其他服务器应用程序的专用的服务器,你可以改为在虚拟机实例上安装 Office Web Apps Server。下面放一张官网的图。

8c7063a8e1b3b1a25e52e5ec45b5c610.gif

所以从上面的OWA服务来看,我们当然可以把OWA接入自己开发的系统中,进行文件的转换,最终展示在浏览器上。正如上面提到的WOPI,提供了一系列基于web方式的,使文档能在OWA中查看和编辑office服务。也就是说,只要我们的应用按照WOPI实现的接口,就可以调用OWA服务,实现在线文档查看编辑。而且还支持跨平台,可以在IOS,安卓使用,这样产品优势就体现出来了。我去看了下,目前我看到的是明道是基于OWA实现的,有几家公司此功能是对外收费的。下面我们先来安装OWA服务。


安装注意事项

  • 不安装任何其他服务器正在运行 Office Web Apps Server 的服务器上。这包括 Exchange Server、 SharePoint Server、 Lync Server 和SQL Server。如果您有服务器不足,请考虑在一台服务器必须运行的虚拟机实例中的 Office Web Apps Server。

  • 不安装任何服务或角色,取决于在端口 80、 443 或 809 上的 Web 服务器 (IIS) 角色因为 Office Web Apps Server 定期删除这些端口上的web 应用程序。

  • 不安装任何版本的 Office。如果已安装,您需要先卸载它才能安装 Office Web Apps Server。

  • 不安装 Office Web Apps Server 的域控制器上。它不会在 Active Directory 域服务 (AD DS) 的服务器上运行。(这里我多开了一台虚拟机用来装)

  • 把大体的事项列了下,其实还有很多,官方文档还是很齐的。


为OWA服务安装必备软件

1.操作系统

 对于操作系统官网上提供三款:Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2,当然我这里选择的是Windows Server 2012,因为他最省事,装一个补丁就够了。(我已经保存了安装的所有东西,放在网盘,列好顺序,有需要的可以自己下载)。安装系统就不说了,傻瓜式,我是在虚拟机上完成部署的。

2.安装服务

进入系统后,点看服务器管理,点击添加角色。

8c05f89dd35ed8ec7278f5a35e3e735e.png

然后开始之前下一步,安装类型,基于角色安装下一步,服务器选择已经选中了直接下一步,然后到达服务器角色,这里我们需要勾选一个web服务器,我这里已经安装过了

e310e97a19099000acb6be2c3c1939fa.png

在安装IIS的时候要安装Web服务器下面的“管理服务”,然后就是等安装结束了。

ac68e99af94969c06a891de48b52d45f.png

当然也可以通过管理员身份运行PowerShell(效果一样)

Add-WindowsFeatureWeb-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

3.安装Office Web Apps

6aef3474216eae46ae74f026eedd33f2.png

在我给的文件夹中分别点开文件夹1,2安装,接着还是从上往下安装,解释一下,wacserver.exe就是office web apps安装包,下面带有2013的是它的补丁,最下面从字面意思也看的出来是他的语言包,这个安装也是傻瓜操作,就不说了。安装之后重启。否则接下来的操作中,PowerShell识别不了相关的cmdlet命令。然后我们先不管这台服务器。


安装域控

对于OWA服务的域要求,官网有这么一段话。

ce1cf9c1f5903dc9304033ad3dd0c63a.png

所以我这里是新开了一台虚拟机用来装域控,然后把刚才装了OWA服务的转换服务器加入到域控制器中。


新开一台虚拟机,还是一样可以先安装一个Windows service 2012 系统。

1.安装域

  • 点击服务器管理,添加角色

  • 开始之前 下一步

  • 安装类型 基于角色.. 下一步

  • 服务器选择 下一步

  • 选择服务器角色这里,要选择安装AD域服务(Active Directory 域服务)

    26d04893fd8467e68de211ec69c35d2e.png

然后一直到安装结束

2.配置域

1.点击ADS,点击黄色部分的更多

a51489fba4bb7417eadc23307be3563d.png


2.点击“将此服务器升级为域控制器” 。

2845afc3b8bf90c866ebfa9ed3af5fda.png

3.进入AD域服务器配置向导,选择 “添加新林” ,输入域(记住这个域,后面我们的转换服务器绑定的就是这个域),点击下一步。

4.填写密码,下一步

5.提示DNS无法创建,没关系,直接下一步。

6。然后一直默认下一步知道安装结束。如果报错了。可能用户没有设置密码,给这个用户设置一个密码,再回来。

安装完成应该会重启。


将转换服务器加入到域控制器

1.回到了我们之前创建的转换服务器,修改转换服务器的NDS,指向域控服务器的ip地址。

dbbd91d9466685904e56450338a02d33.png

2.打开计算机属性,修改计算机全称,我给了计算机一个新的全称,用来当作之后的转换服务器域名,然后更改他的域,填上之前创建域控的域名。最终效果如下。

53ecb2d52c342116f69ee6f3ce876d54.png


重新打开域控服务器,点击管理 > 添加服务器,输入转换服务器修改后的计算机名称,立即查找。将搜索到的服务器双击添加到右边,点击确定。 只要你之前把转换服务器绑定到当前域控了就能找到。

12127f517dacffd2781ef885b6ebba8d.png

然后在域控服务器里面,你就能看到两台服务器联机(我这里还有一台没显示出来,是因为我把转换服务器关了,事实证明8G运行内存真的不够),到这里域控服务器安装结束。剩下最后一点了。内网使用,虚拟机我设置的都是桥接

263dacf265f219c603467d2d615e96b9.png


部署OWA服务

在OfficeWebApps服务器上,以管理员身份打开PowerShell,键入命令

New-OfficeWebAppsFarm–InternalURL"http://office.yukong.com"–AllowHttp–EditingEnabled

这段命令整体意思是创建一个OWA服务器场,里面的参数介绍一下。

1.–InternalURL:是运行的OWS,我理解成平常我们用来访问的域名了。里面的

office.yukong.com就是我们之前设置的转换服务器计算机全称。

2.–AllowHttp:配置服务器场使用HTTP。所以你也可以使用https,具体操作类似,

查看文档

3.EditingEnabled:启用OfficeWebApps与SharePoint2013一起使用时中

编辑。此参数不使用LyncServer2013,因为该主机不支持编辑。


按下回车,会出现提示,输入y,回车。会出现一个列表界面。我们现在需要检验安装是否成功。

InternalURL就是我们指定的OWA服务器场。在你的虚拟机上访问

http://servername/hosting/discovery

我这里的servername就是office.yukong.com。

出现这样的页面说明你安装没问题

01a2ca32a5bd7255ccc89d8e04f40de8.png
这个页面是一个xml文件,主要是对应不同的文件转换转换服务器转换的地址。下面会提到一点。



关于WOPI关系结构

 前面有提到过WOPI,只要我们实现了标准的WOPI接口,我们就能实现在线转换文件。

bf50ef48e8967a89a3134e021cf91bc7.jpg



  • Browser浏览器 

  • WOPI Server指我们存放文档的web服务

  • WOPI Client指的就是提供转换的OWA服务


 从图中可以看出,转换服务器最终要请求我们两次,第一次,告诉他文件信息,第二次给他文件。所以WOPI Server至少要提供两个服务。一个是CheckFileInfo服务,另一个是GetFile服务。

1.CheckFileInfo服务

1.此服务返回的是请求文件的基本信息,WOPI Host以json方式返回给WOPI Client.

2.服务的URL为:HTTP://server/<...>/wopi*/files/<id>

3.返回的参数有很多,但是至少要五个属性:

9e11703cd2ea8c2b8702e37be5f9c48b.png

  • OwnerId:文件所有者编号

  • BaseFileName: 文件名。

  • Size: 文件大小,以bytes为单位。

  • SHA256: 文件的256位bit的SHA-2编码散列内容。

  • Version: 文件版本号,文件如果被编辑,版本号也要跟着改变

2.GetInfo服务

此服务返回文件内容,以数据流的形式返回给WOPI Client。服务的URL为:HTTP://server/<...>/wopi*/files/<id>/contents。*两个服务之间只相差了一个/contents,这是为了让WOPI Client根据CheckFileInfo的Url推导出GetInfo,所以千万别自己破坏了这层关系。

另外我们当然可以在地址后面带一个身份令牌,第一次WOPI Client接受到这个令牌,第二次请求服务的时候他会把这个令牌给GetInfo服务,然后由WOPI Server来验证当前用户对文件的权限。

具体的url服务以及其中的所有参数参考官方文档:http://msdn.microsoft.com/en-us/library/hh622920(v=office.12).aspx

对于之前的服务请参考官方文档:https://docs.microsoft.com/zhcn/webappsserver/office-web-apps-server

其实写到这里已经差不多尾声了,毕竟这里面的东西太多了,写不完的,我这里也就实现了对office基于浏览器查看的服务,编辑什么的还没来得及看。

最后我在自己物理机项目中通过OWS进行简单人工PPT案例转换(也就是开头的图)

d829cb854721e769fc101db602b2e779.png

我来分析一下这个地址,前面部分的192.168.2.231/p/PowerPointFrame.aspx?(这里的192.168.2.231就是转换地址的ip,上文中的office.yukong.com),因为我们现在要转换的是pptx,所以我们从http://192.168.2.231查找pptx的转换方式

2d7c8299e24c78529576f22bad11c1fb.png

后面的地址就是文件地址了,也就是我当前物理机的项目。

这篇文章只是开个头,如果有这方面需求的朋友可以参考这篇文章加官方文档部署自己的Office Web apps 服务,接下来我还会做进一步的调整,还会去实现在线编辑,后续可能还会整理出来文章。有错误,请指点。


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: Leetcode PHP题解--D17 883. Projection Area of 3D Shapes

>> 下一篇: Leetcode PHP题解--D18 908. Smallest Range I