网站设计论文前言怎么写,自己做一个网站,网站建设服务器可以租吗,logo设计免费在线生成最近开始学习.Net Core#xff0c;并使用Visual Studio Code工具来开发。感觉开发起来特别的方便#xff0c;但是有个头疼的地方#xff1a;许多的类库被修改了#xff0c;一时半会儿还熟悉不了#xff0c;需要查阅官方API。。。 Microsoft Office Web Apps#xff08;以… 最近开始学习.Net Core并使用Visual Studio Code工具来开发。感觉开发起来特别的方便但是有个头疼的地方许多的类库被修改了一时半会儿还熟悉不了需要查阅官方API。。。 Microsoft Office Web Apps以下简称OWA是由微软推出的基于Web端的在线办公工具它将Microsoft Office产品的体验延伸到可支持的浏览器上。OWA让你可以在任何地方共享自己的Office文档。 系统集成OWA需要参考官方的系统接口定义https://wopi.readthedocs.io/en/latest/这个接口简称WOPIWeb Application Open Platform Interface。 下面介绍一个完整的OWA的例子最终效果如图 wopi协议的工作流程如下图 我们所要做的就是开发一个OWA客户端提供文件信息及文件流给OWA服务器当然也接收从OWA服务POST来的文件流来保存文件出于安全考虑也可以加上access_token进行自定义权限验证。 标准的WOPI服务包括CheckFileInfo、GetFile、Lock、GetLock、RefreshLock、Unlock、UnlockAndRelock、PutFile、PutRelativeFile、RenameFile、DeleteFile、PutUserInfo等 返回状态码定义 200 OK 成功 400 Bad Request 错误请求 401 Unauthorized 非法 与access_token相关 409 Conflict 冲突 目标文件已经存在或LOCK 413 Request Entity Too Large 文件太大 500 Internal Server Error 内部服务器错误 501 Not Implemented 不支持如果CheckFileInfo的SupportsUpdate和UserCanNotWriteRelative都设置为true则必须返回501 OwaFileInfo类 需要定义一个文件信息类该类的主要属性包括 属性名 类型 描述 BaseFileName String 包含扩展的文件名 BreadcrumbFolderName String 文件夹名称界面显示 BreadcrumbDocName String 文档名称界面显示 OwnerId String 唯一标识文件所有者 Size Long 文件大小 SHA256 String SHA-2 256位散列编码值 Version String 版本编号 SupportsUpdate Bool 是否支持PUT文件 UserCanWrite Bool 是否有权限修改 SupportsLocks Bool 是否支持Lock和Unlock CloseButtonClosesWindow Bool 是否显示关闭按钮 更多属性参考API https://wopirest.readthedocs.io/en/latest/files/CheckFileInfo.html 属性名必须与API中一致才能被OWA服务器识别。 using System;
using System.Runtime.Serialization;namespace WebApplication.Models.FileInfoModels
{[DataContract(Name OwaFileInfo)]public class OwaFileInfo{public OwaFileInfo(){this.SupportsUpdate false;this.UserCanWrite false;this.SupportsLocks false;}[DataMember(Name BaseFileName)]public string BaseFileName { get; set; }[DataMember(Name OwnerId)]public string OwnerId { get; set; }[DataMember(Name Size)]public long Size { get; set; }[DataMember(Name SHA256)]public string SHA256 { get; set; }[DataMember(Name Version)]public string Version { get; set; }[DataMember(Name SupportsUpdate)]public bool SupportsUpdate { get; set; }[DataMember(Name UserCanWrite)]public bool UserCanWrite { get; set; }[DataMember(Name SupportsLocks)]public bool SupportsLocks { get; set; }[DataMember(Name BreadcrumbDocName)]public string BreadcrumbDocName { get; set; }[DataMember(Name CloseButtonClosesWindow)]public bool CloseButtonClosesWindow { get; set; }[DataMember(Name BreadcrumbFolderName)]public string BreadcrumbFolderName { get; set; }}
} OwaFileInfo CheckFileInfo服务 接口要求实现CheckFileInfo服务作用是OWA服务器需要获取文件的详细信息和操作权限如是否可编辑以确保文件的真实有效。这些信息已经在上面的类中进行了定义。 MethodGET URIHTTP://server/.../wopi*/files/id Request Headers X-WOPI-SessionContext 上下文session参数值 该接口需要返回的json格式如 {BaseFileName:test.docx,OwnerId:admin,Size:798,SHA256:wlbRKXNdLtHNaOcXnejbIVzHPHAZzI1MhKNHUCVlw,Version:2016-03-17T02:27:33,SupportsUpdate:true,UserCanWrite:true,SupportsLocks:true,WebEditingDisabled:false} 说明 0.返回的属性名区分大小写很多插件默认将头字母转换成小写最终导致对接失败。 1.所有的OWA客户端接口URl必须以/wopi开头 如 http://localhost:5000/api/wopi/files/test.docx http://localhost:5000/api/wopi_test/files/test.docx 2. SHA256的计算 a.获取该文件的文件流 b SHA256计算文件流Hash值 c.将Hash值转换为Base64String string sha256 ;
using (FileStream stream File.OpenRead(fileName))
using (var sha SHA256.Create())
{byte[] checksum sha.ComputeHash(stream);sha256 Convert.ToBase64String(checksum);
} 3.验证action返回的结果访问http://localhost:5000/api/wopi/files/test.docx返回结果如下图 GetFile服务 当office web apps检验完文件信息后就可以获取文件了 MethodGET URI: HTTP://server/.../wopi*/files/id/contents?access_tokentoken Request Headers X-WOPI-MaxExpectedSize Response Headers: X-WOPI-ItemVersion 文件版本号类似于CheckFileInfo里的Version 返回文件的二进制流 [Route(files/{name}/contents)]
[HttpGetAttribute]
public FileStreamResult Get(string name, string access_token)
{var file Files/ name;var stream new FileStream(file, FileMode.Open, FileAccess.Read);return new FileStreamResult(stream, application/octet-stream);
} PutFile服务 MethodPOST URI: HTTP://server/.../wopi*/files/id/contents?access_tokentoken Request Headers: X-WOPI-Override 固定值 PUT必须 X-WOPI-Lock 锁定请求的字符串标识具体参考LOCK请求 Response Headers: X-WOPI-Lock锁定请求的字符串标识 X-WOPI-LockFailureReason 锁定失败原因 X-WOPI-ItemVersion 版本号 请求内容为文件的二进制格式 [Route(files/{name}/contents)]
[HttpPostAttribute]
public async void Post(string name, string access_token)
{using (FileStream fs System.IO.File.Create(Files/ name)){await Request.Body.CopyToAsync(fs);}
} 至此基本的Office在线预览功能就基本完成了 后续工作 1.规范请求和返回的头信息完善功能实现在线编辑 2.引入配置文件和缓存配置数据 3.添加预览和编辑链接生成controller 4.完善access_token验证逻辑转载于:https://www.cnblogs.com/liuxiaobo93/p/5819595.html