最近项目中需要用到office文件在线编辑功能,然而很多解决方案都是收费的,于是决定采用微软免费的microsoft office online 2016和wopi 协议来实现。

wopi 协议

WOPI的英文全称是“Web Application Open Platform Interface”,中文名为“Web应用程序开放平台接口协议”。WOPI协议提供一系列基于web方式的,使文档能在 Office Web Apps 中查看与编辑的接口服务。

只要 web 应用按照标准,实现了 WOPI 的接口,那么就可以调用 Office Web Apps,实现文档的在线预览编辑。比如 SharePoint,Exchange,SkyDriver,Dropbox 集成了 Office Web Apps。

在 WOPI 结构中,存放Office文档的 web 应用叫 WOPI Host 或者 WOPI Server。把查看编辑操作 Office 文档的 web 应用叫 WOPI Client 或者叫 WOPI applications。SharePoint,Exchange,自己开发的文档管理系统充当的就是 WOPI Host,Office Web Apps 充当的就是 WOPI Client 。

Office开发团队对WOPI的介绍:http://blogs.msdn.com/b/officedevdocs/archive/2013/03/21/introducing-wopi.aspx。
Office Web Apps服务器概述:http://technet.microsoft.com/en-us/library/jj219437.aspx。

开发环境

office online的安装教材网上很多,这里就不再赘述了。安装好office online,然后按照下面的步骤进行wopihost的开发。我用的开发环境是jkd1.8,spring boot。

我们需要实现3个接口
GET api/wopi/files/{name}
GET api/wopi/files/{name}/contents
POST api/wopi/files/{name}/contents

其中第一个接口获取文件的信息,返回的是json数据格式,第二个是获取文件流,第三个是保存修改文件。

接口实现

先看下获取文信息接口的实现:

@GetMapping("/files/{name}")
public void getFileInfo(HttpServletRequest request, HttpServletResponse response) {String uri = request.getRequestURI();FileInfo info = new FileInfo();try  {// 获取文件名, 防止中文文件名乱码String fileName = URLDecoder.decode(uri.substring(uri.indexOf("wopi/files/") + 11), CHARSET_UTF8);if (fileName != null && fileName.length() > 0) {File file = new File(filePath + fileName);if (file.exists()) {info.setBaseFileName(file.getName());info.setSize(file.length());info.setOwnerId("admin");info.setVersion(file.lastModified());info.setSha256(getHash256(file));}}ObjectMapper mapper = new ObjectMapper();response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);response.getWriter().write(mapper.writeValueAsString(info));} catch (Exception e) {logger.error("getFileInfo failed, errMsg: {}", e.toString());e.printStackTrace();}
}

然后是获取文件流接口的实现:

@GetMapping("/files/{name}/contents")
public void getFile(@PathVariable String name, HttpServletResponse response) {// 文件的路径String path = filePath + name;File file = new File(path);String filename = file.getName();try (InputStream fis = new BufferedInputStream(new FileInputStream(path));OutputStream toClient = new BufferedOutputStream(response.getOutputStream())) {byte[] buffer = new byte[fis.available()];fis.read(buffer);// 清空responseresponse.reset();// 设置response的Headerresponse.addHeader("Content-Disposition", "attachment;filename=" +new String(filename.getBytes(CHARSET_UTF8), "ISO-8859-1"));response.addHeader("Content-Length", String.valueOf(file.length()));response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);toClient.write(buffer);toClient.flush();} catch (IOException e) {logger.error("getFile failed, errMsg: {}", e.toString());e.printStackTrace();}
}

保存文件修改的接口实现:

@PostMapping("/files/{name}/contents")
public void postFile(@PathVariable(name = "name") String name, @RequestBody byte[] content) {// 文件的路径String path = filePath + name;File file = new File(path);try (FileOutputStream fop = new FileOutputStream(file)) {fop.write(content);fop.flush();} catch (IOException e) {logger.error("postFile failed, errMsg: {}", e.toString());e.printStackTrace();}
}

###接口访问

访问http://owas.contoso.com/hosting/discovery,owas.contoso.com是配置的office online的域名,当然也可以通过IP访问,请换成自己的地址,如图:

在上面可以找到对应的文件类型的请求路径。然根据上面的URL+ WOPISrc=wopiHost的接口地址
就可以实现服务了。

例如word文档预览
http://[owas.domain]/wv/wordviewerframe.aspx?WOPISrc=http://[WopiHost.domain]:8080/wopi/files/test.docx

word文档编辑
http://[owas.domain]/we/wordeditorframe.aspx?WOPISrc=http://[WopiHost.domain]:8080/wopi/files/test.docx

代码已上传github,有用的话记得start一下啊__
地址 https://github.com/ethendev/wopihost

注意:web app上没有保存按钮,是自动保存的。


参考资料
Office Online Server 概述
部署 Office Online Server
Windows Server 2012 R2 创建AD域
WOPI协议信息

Office Online Server下载地址
可以从批量许可服务中心 (VLSC) 下载 Office Online Server。
备用下载地址:http://www.0daydown.com/10/630107.html。

office online server实现文档的预览编辑相关推荐

  1. Office Online Server 文档在线预览编辑【速成篇】

    操作系统 Windows Server 2012 R2 下载地址 密码: h6cq 部署 Office Online Server 官方手册 参照文档 仅执行步骤 1:为 Office Online ...

  2. 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

    在博客园很多文章里面,曾经有一些介绍Office文档预览查看操作的,有些通过转为PDF进行查看,有些通过把它转换为Flash进行查看,但是过程都是曲线救国,真正能够简洁方便的实现Office文档的预览 ...

  3. [转载]基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

    在博客园很多文章里面,曾经有一些介绍Office文档预览查看操作的,有些通过转为PDF进行查看,有些通过把它转换为Flash进行查看,但是过程都是曲线救国,真正能够简洁方便的实现Office文档的预览 ...

  4. (转)基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

    http://www.cnblogs.com/wuhuacong/p/3871991.html 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览 在博客园很多文章 ...

  5. office 文档在线预览新姿势之永中云转换

    你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,或者需要毕业设计,大作业指导,购买付费源码等,欢迎指教: 企鹅:869192208 文章目录 前言: 一.接入准备 二.预览 w ...

  6. office文档在线预览工具平台选型

    ​​​​​​在线预览原理 文档在线预览说明: 1.业务系统生成文档浏览地址,用户通过终端进行访 2.用户终端访问文档预览资源地址,请求文档解析器,解析器分为私有云和公有云部署,作用是将文档进行解析成x ...

  7. java对office、pdf文档在线预览解析(融合进项目中)

    最近在项目中要做一个文档的预览,在网上搜了好多demo,都可以实现其功能,但是放在自己的项目中有点复杂. 先说明本人的开发环境(win7+tomcat7+maven+svn+myeclipse),接下 ...

  8. Office文档在线预览接口服务器

    现在的Office文档在线预览基本都是收费的,但这个功能几乎在所有软件系统中都会有这个需求,微软有一个Office online是免费的,但是安装跟配置非常复杂,可以说用难度5颗星来形容,有没有一个更 ...

  9. 前端【vue】实现文档在线预览功能,在线预览pdf、word、xls、ppt等office文件

    前端江太公 前端实现文档在线预览功能 最直接的就是使用XDOC 文档云服务 XDOC可以实现预览以DataURI表示的DOC文档,此外XDOC还可以实现文本.带参数文本.html文本.json文本.公 ...

最新文章

  1. log4j2配置实例[按小时记录日志文件]
  2. 表的插入、更新、删除、合并操作_11_更新表的记录
  3. angularJs关于指令的一些冷门属性
  4. JAVA——附加作业1——统计员工数
  5. ibm服务器无显示器,IBM 2128彩色显示器,无论有无连机信号输入均黑屏
  6. 南京牵手印度软件 本土软件企业态度不一
  7. 一次性定时器 setTimeout
  8. TDiocpCoderTcpServer 使用
  9. JavaScript 验证 API中的setCustomValidity()方法
  10. SCCM 2007 R7使用手记
  11. 华为机试(6.17笔试题解析)
  12. mysql schemata 链接_MYSQL联合注入
  13. 自然语言处理顶会 ACL2019论文接收列表
  14. Mac book 合并分区,报错文件系统验证失败的解决办法
  15. Csv 之 简单解决使用 Excel 打开 csv 出现中文乱码现象
  16. java 清理页面缓存数据_清除浏览器缓存的几种方法总结(必看)
  17. 解决安装Visio2016 和office 2016不能兼容问题
  18. 亚马逊运营技巧,卖家该如何提升BSR排名?
  19. Qt Creator编写C++中文乱码解决方法
  20. 计算机专业b区大学,b区考研学校,b区考研学校排名。

热门文章

  1. 水果品质自动分级的机器视觉系统
  2. 计算机毕业设计之基于ssm的大学生志愿者服务平台
  3. javaweb JAVA JSP 停车场管理系统源码停车收费系统(ssm停车场管理 停车场收费)
  4. 插件79:搜索Google图书
  5. 计算机应用技术的论文怎么写,计算机应用技术论文摘要怎么写 计算机应用技术论文摘要范文参考...
  6. jdk自带类实现json解析
  7. 制作API离线chm帮助文件教程
  8. android studio 自带模拟器进行 Root 及 Xposed安装
  9. 最新kali之curl(一)
  10. 思维导图整理大厂面试高频数组23: 股票问题大总结, 彻底搞懂股票问题