你的位置:首页 > 软件开发 > ASP.net > .Net Core集成Office Web Apps(二)

.Net Core集成Office Web Apps(二)

发布时间:2016-09-02 18:00:06
想要使用OWA需要一台单独的服务器来部署,这对很多人造成困难。而写该文的目的是为了分享有个OWA的集成步骤,它不仅适用于.Net开发环境,其它语言也是一样的,只要实现了需要的服务接口。并且该文不局限与OWA的研究,还包括Config、、Cache、Redis等技术。更重要的是熟悉 ...

想要使用OWA需要一台单独的服务器来部署,这对很多人造成困难。而写该文的目的是为了分享有个OWA的集成步骤,它不仅适用于.Net开发环境,其它语言也是一样的,只要实现了需要的服务接口。并且该文不局限与OWA的研究,还包括Config、、Cache、Redis等技术。更重要的是熟悉.Net Core开发。

在OwaFileInfo的SupportsUpdate、UserCanWrite、SupportsLocks属性为true时将允许用户在线编辑文件。

在原有的基础上编辑一个test.xlsx文件,其访问链接为(测试链接没有实际意义):http://owa.test.com/x/_layouts/xlviewerinternal.aspx?edit=1&WOPISrc=http%3a%2f%2f192.168.1.1%2fapi%2fwopi%2ffiles%2ftest.xlsx&access_token=H7lFBYT4pVMK

将弹出如下对话框

.Net Core集成Office Web Apps(二)

点击编辑副本

.Net Core集成Office Web Apps(二) 

查看请求日志发现,另存副本请求将调用PutRelativeFile服务,所有我们应该再原来的基础上添加PutRelativeFile服务。

PutRelativeFile服务

PutRelativeFile操作将在主机上创建一个基于当前文件的副本文件,创建成功后必须将副本文件名及URL以Json的格式返回给OWA服务器。

如果OWA客户端设置了CheckFileInfo的SupportsUpdate为true的话,就必须要实现PutRelativeFile服务,否则需要设置UserCanNotWriteRelative为true并且返回501状态码。

Method:POST

URI:HTTP://server/<...>/wopi*/files/<id>

 

Request Headers:

X-WOPI-Override 固定值 PUT_RELATIVE

X-WOPI-SuggestedTarget 文件扩展名或全名(可修改)

X-WOPI-RelativeTarget 文件全名(不可更改)

X-WOPI-OverwriteRelativeTarget 是否覆盖文件名

X-WOPI-Size 文件的大小bytes

X-WOPI-FileConversion 指示请求是否转换文件

Response Headers:

X-WOPI-ValidRelativeTarget

X-WOPI-Lock

X-WOPI-LockFailureReason

 

该接口需要返回的Json格式如下:

{Name:”test.xlsx”,Url:” http://server/<...>/wopi/files/ test.xlsx”, HostViewUrl :””, HostEditUrl :””}

 

说明:Name为新的文件名(如果修改的话),Url为新的文件的CheckFileInfo服务路径。

在线Excel用到这个服务的情况有两种:

1.另存为,如果没有实现PutRelativeFile服务,则另存为将不能使用;

2.当编辑服务器不支持的Excel某些格式的文件时,会先保存一个系统支持格式的副本,如果没有实现PutRelativeFile服务,则不能编辑该Excel(因为保存新文件会失败);

 

PutRelativeFile服务与CheckFileInfo服务的URL是相同的,只是Method不同,所以我们只需在CheckFileInfo的基础上修改。

.Net Core集成Office Web Apps(二).Net Core集成Office Web Apps(二)
    [RouteAttribute("files/{name}")]    public JsonResult GetFileInfo(string name, string access_token)    {      string wopiType = Request.Headers["X-WOPI-Override"];      Console.WriteLine("1.X-WOPI-Override:" + wopiType);      if (wopiType == "PUT_RELATIVE")      {        using (FileStream fs = System.IO.File.Create("Files/new_" + name))        {          Request.Body.CopyTo(fs);        }        Response.Headers.Add("X-WOPI-ValidRelativeTarget", "new_" + name);        Response.Headers.Add("X-WOPI-Lock", Request.Headers["X-WOPI-Lock"]);        Response.StatusCode = 200;        PutRelativeFile file = new PutRelativeFile();        file.Name = "new_" + name;        file.Url = "http://b1wcfoqm7r.proxy.qqbrowser.cc/api/wopi/files/new_" + name;        return Json(file);      }      else if (wopiType == "UNLOCK" || wopiType == "LOCK")      {        Response.Headers.Add("X-WOPI-Lock", Request.Headers["X-WOPI-Lock"]);        Response.StatusCode = 200;        return Json("");      }      else      {        FileHelper helper = new FileHelper();        var info = helper.GetFileInfo(name);        info.SupportsUpdate = true;        info.SupportsLocks = true;        info.UserCanWrite = true;        return Json(info);      }

原标题:.Net Core集成Office Web Apps(二)

关键词:.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。