WOPI项目的创建
首先用vs2012创建一个mvc4的程序。如图:
从上一篇我们可以知道,WOPI通讯主要通过两个服务:
一个是CheckFileInfo服务,
一个是GetFile服务。
所以下面我们主要介绍这两个服务的创建。
1. 首先创建CheckFileInfo服务:
我们先确定这个服务的路由地址
设置为:http://<ServerName>/files/<filename>?access_token=<token>
修改App_Start文件夹下面的WebApiConfig.cs文件。
插入下列代码:
config.Routes.MapHttpRoute(
name: "FileInfo",
routeTemplate: "wopi/files/{name}",
defaults: new { controller = "files", action = "GetFileInfo" }
);
如图所示
创建一个名称为files的Controller,
设置为空API控制器:
之所以我们不用平常的MVC控制器,而选API控制器,是因为我们做的是服务,来返回信息,所以要换成ApiController。
这个服务要返回的是json,属性包括为
BaseFileName
OwerId
Size
SHA256
Version
所以我们要创建一个model,包含上述属性
如下图:
在上述的路由器规则中,action用的是GetFileInfo方法,所以要在FileController规则中写一个GetFileInfo方法,这个方法返回CheckFileInfo类型。
public CheckFileInfo GetFileInfo(string name, string access_token)
{
string _access_token = access_token;
var file = HostingEnvironment.MapPath("~/App_Data/" + name);//从硬盘中获取name文件
FileInfo info = new FileInfo(file);
var json = new CheckFileInfo
{
BaseFileName = info.Name ,//"test.docx",
OwnerId = "admin",
Size = info.Length,
SHA256 = "+17lwXXN0TMwtVJVs4Ll+gDHEIO06l+hXK6zWTUiYms=",
Version = "GIYDCMRNGEYC2MJREAZDCORQGA5DKNZOGIZTQMBQGAVTAMB2GAYA===="
};
return json;
}
如下图
我们访问一下这个地址:
http://192.9.206.52:1407/wopi/files/test.docx?access_token=06l+hXK6zWTUi
这个192.9.206.52是我的本机地址。
得到下列结果:
证明这个服务制作成功。
2.然后再来制作GetFile服务。
因为GetFileInfo的URI地址
http://<ServerName>/files/<filename>?access_token=<token>
所以GetFile地址应该比其多一个/Contents,所以为
http://<ServerName>/files/<filename>/Contents?access_token=<token>
设置它的路由地址
config.Routes.MapHttpRoute(
name: "Contents",
routeTemplate: "wopi/files/{name}/contents",
defaults: new { controller = "files", action = "GetFile" }
);
如下图:
GetFile这个服务返回的应该是数据流,所以返回的类型应该是HttpResponseMessage类型。
从硬盘中获取一个doc文件,转换为Stream类型,代码如下:
public HttpResponseMessage GetFile(string name, string access_token)
{
try
{
string _access_token = access_token;
var file = HostingEnvironment.MapPath("~/App_Data/" + name);//name是文件名
var rv = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new FileStream(file, FileMode.Open, FileAccess.Read);
rv.Content = new StreamContent(stream);
rv.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return rv;
}
catch (Exception ex)
{
var rv = new HttpResponseMessage(HttpStatusCode.InternalServerError);
var stream = new MemoryStream(UTF8Encoding.Default.GetBytes(ex.Message ?? ""));
rv.Content = new StreamContent(stream);
return rv;
}
}
如下图:
至此,两个服务制作完毕。
可以访问下列地址查看效果,
http://192.9.206.50/wv/wordviewerframe.aspx?WOPISrc=http%3a%2f%2f192.9.206.52%3a1407%2fwopi%2ffiles%2ftest.docx&access_token=06l+hXK6zWTUi
其中
192.9.206.50为OWA的机器地址,
192.9.206.52为本机的地址。
这个URL地址带了两个参数
分别为WOPISrc,值为http://192.9.206.52:1407/wopi/files/test.docx
Access_token,值为06l+hXK6zWTUi
这两个参数的意思,我已经在以前的博文中《如何整合Office Web Apps至自己开发的系统(一)》说过了。
在这个例子中,access_token我是随便取的,并且在代码中也没有对这个令牌进行验证。
确保两台机器的相应端口能互相访问。
访问得到的结果如下:
怎么会访问出错呢?
翻了很久资料,发现有老外也遇到过类似这种问题:
I write this message because on actually working on this WOPI protocol. I try to build a WOPI host. I think i'm almost finish the "view" action. But i got some problems with the CheckFileInfo (JSON) or GetFile (/content). For me everything is well fonctionning,
but the WAC doesn't work just after it call my JSON. I really dont know why.. I observed all the interactions between SharePoint and WAC, to show what is different with mine host. But i think i need some help now. Does anyone can try to give me some hint ?
I checked everythings (Correlation-ID, JSON, access-token) ...
别人的回答是让他考虑一下是不是SHA散列算法的问题:
You might also double-check that your SHA hashes are being calculated correctly - this can cause some problems.
并给了一个网站地址:www.tylerbutler.com/.../base64-encoded-sha256-hashes
那就按照提示把散列算法加上去,
代码如下:
var file = HostingEnvironment.MapPath("~/App_Data/" + name);//从硬盘中获取name文件
FileInfo info = new FileInfo(file);
var hasher = SHA256.Create();
byte[] hashValue;
using (Stream s = File.OpenRead(file))
{
hashValue = hasher.ComputeHash(s);
}
string sha256 = Convert.ToBase64String(hashValue);
如下图:
再次运行,OK,大功告成
其实按照上述步骤,就可以在自己的系统中调用Office Web Apps的查看功能了,实在要看demo的同学可以去下列链接下载
http://download.csdn.net/detail/poisson1984/6003183
最近csdn上的积分吃紧,顺便刷点积分,
下面有一个外国的例子,会更全面:http://pan.baidu.com/s/1f4suc
相关推荐
本文介绍了Office web apps如何搭建部署,工作流程以及相关接口如何调用。因为接口调用采用HTTP协议,因此可以采用任何语言开发接口调用OWA。
该存储库称为web-apps-pro项目信息官方网站: : 代码存储库: : SaaS版本: : 用户反馈和支持如果您对有任何疑问或疑问,请访问我们的官方论坛以找到您的问题的答案: 或者您可以在上询问和回答ONLYOFFICE开发问题...
office web app server 文档预览服务安装 docs msdn 安装以及部署说明文档,注意需要域环境 wopi 接口demo 项目使用spring boot jdk 1.8 安装部署 需要的软件包 链接: 密码:pamu 我安装使用的是windows server 2012 ...
项目信息官方网站: : 代码存储库: : SaaS版本: : 用户反馈和支持如果您对有任何疑问或疑问,请访问我们的官方论坛以找到您的问题的答案: 或者您可以在上询问和回答ONLYOFFICE开发问题。执照web-apps是根据GNU ...
使用 HTML5、Javascript 和 node.js 开发云服务 无数X 模组 模块 1.- 服务器 JavaScript 和 node.js 简介。 语句、变量、布尔值、数字、字符串和函数 模块 2.- 服务器 JavaScript 和 node.js 简介。 循环、预定义类...
重写了非官方的webapp-office,打破了上游icloud-for-linux的局面。 unofficial-webapp-office2对Unofficial-webapp-office的重写,它脱离了上游icloud-for-linux。 Unofficial-webapp-office2使用GTK3,WebKitGTK和...
基本上,它允许开发人员通过实现一堆接口将自定义数据源与Office Online Server(以前称为Office Web Apps)或任何其他WOPI客户端集成。 与网络上现有样本相比的功能/改进使用ASP.NET Core MVC构建的干净WebAPI(无...
考试 MB-400: Microsoft Power Apps + Dynamics 365 Developer ...考生应具有包括 JavaScript、TypeScript、C#,HTML、.NET,Microsoft Azure、Office 365、RESTful Web 服务、ASP.NET和 Power BI 的开发经验。
这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...
应用程序完成后,它将在支持 Office Apps for Outlook 的桌面、移动和 Web 客户端上的所有其他 Outlook 客户端中运行。 您将在此应用程序中构建的应用程序将安装到 Outlook 中,并在阅读电子邮件时显示。 它将获取...
应用程序完成后,它将在支持 Office Apps for Excel 的桌面、移动和 Web 客户端上的所有其他 Excel 客户端中运行。 您将在此应用程序中构建的应用程序将作为自定义任务窗格安装在 Excel 中。 它将允许您按供应商和...
CSS渐变适用于: 苹果邮件iOS邮件Outlook iOS Gmail iOS Gmail Android Gmail网站,Google Apps(浏览器) 三星邮件雷鸟+其他各种基于Web的电子邮件客户端VML后备可用于: 展望2007 展望2010 展望2013 展望2016 ...