Office Online Server是微软开发的一套基于Office实现在线文档预览编辑的技术框架(支持当前主流的浏览器,且浏览器上无需安装任何插件,支持word、excel、ppt、pdf等文档格式),其客户端通过WebApi方式可集成到自已的应用中,支持Java、C#等语言。Office Online Server原名为:Office Web Apps Server(简称OWAS)。因为近期有ASP.NET Core 2.0的项目中要实现在线文档预览与编辑,就想着将Office Online Server集成到项目中来,通过网上查找,发现大部分的客户端的实现都是基于ASP.NET的,而我在实现到ASP.NET Core 2.0的过程中也遇到了不少的问题,所以就有了今天这篇文章。
安装Office Online Server
微软的东西在安装上都是很简单的,下载安装包一路”下一步“就可完成。也可参考如下说明来进行安装:
实现代码
客户端编写拦截器,拦截器中主要接受来自服务端的请求,并根据服务端的请求类型做出相应动作,请求类型包含如下几种:CheckFileInfo、GetFile、Lock、GetLock、RefreshLock、Unlock、UnlockAndRelock、PutFile、PutRelativeFile、RenameFile、DeleteFile、PutUserInfo等。具体代码如下:
1 using Microsoft.AspNetCore.Http; 2 using Newtonsoft.Json; 3 using System; 4 using System.Collections.Generic; 5 using System.IO; 6 using System.Linq; 7 using System.Text; 8 using System.Threading; 9 using System.Threading.Tasks; 10 using System.Web; 11 //编写一个处理WOPI请求的客户端拦截器 12 namespace Lezhima.Wopi.Base 13 { 14 public class ContentProvider 15 { 16 //声明请求代理 17 private readonly RequestDelegate _nextDelegate; 18 19 20 public ContentProvider(RequestDelegate nextDelegate) 21 { 22 _nextDelegate = nextDelegate; 23 } 24 25 26 //拉截并接受所有请求 27 public async Task Invoke(HttpContext context) 28 { 29 //判断是否为来自WOPI服务端的请求 30 if (context.Request.Path.ToString().ToLower().IndexOf("files") >= 0) 31 { 32 WopiRequest requestData = ParseRequest(context.Request); 33 34 switch (requestData.Type) 35 { 36 //获取文件信息 37 case RequestType.CheckFileInfo: 38 await HandleCheckFileInfoRequest(context, requestData); 39 break; 40 41 //尝试解锁并重新锁定 42 case RequestType.UnlockAndRelock: 43 HandleUnlockAndRelockRequest(context, requestData); 44 break; 45 46 //获取文件 47 case RequestType.GetFile: 48 await HandleGetFileRequest(context, requestData); 49 break; 50 51 //写入文件 52 case RequestType.PutFile: 53 await HandlePutFileRequest(context, requestData); 54 break;

