ASP.NET Core 2.0集成Office Online Server(OWAS)实现办公文档的在线预览与编辑(支持word\excel\ppt\pdf等格式)

 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

微软的东西在安装上都是很简单的,下载安装包一路”下一步“就可完成。也可参考如下说明来进行安装:19092925-56e50ede7a59467d8ba8d9047f5dfcb9

 

实现代码

客户端编写拦截器,拦截器中主要接受来自服务端的请求,并根据服务端的请求类型做出相应动作,请求类型包含如下几种: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;
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信