office online server实现文档的预览编辑
最近项目中需要用到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实现文档的预览编辑相关推荐
- Office Online Server 文档在线预览编辑【速成篇】
操作系统 Windows Server 2012 R2 下载地址 密码: h6cq 部署 Office Online Server 官方手册 参照文档 仅执行步骤 1:为 Office Online ...
- 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
在博客园很多文章里面,曾经有一些介绍Office文档预览查看操作的,有些通过转为PDF进行查看,有些通过把它转换为Flash进行查看,但是过程都是曲线救国,真正能够简洁方便的实现Office文档的预览 ...
- [转载]基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
在博客园很多文章里面,曾经有一些介绍Office文档预览查看操作的,有些通过转为PDF进行查看,有些通过把它转换为Flash进行查看,但是过程都是曲线救国,真正能够简洁方便的实现Office文档的预览 ...
- (转)基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
http://www.cnblogs.com/wuhuacong/p/3871991.html 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览 在博客园很多文章 ...
- office 文档在线预览新姿势之永中云转换
你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,或者需要毕业设计,大作业指导,购买付费源码等,欢迎指教: 企鹅:869192208 文章目录 前言: 一.接入准备 二.预览 w ...
- office文档在线预览工具平台选型
在线预览原理 文档在线预览说明: 1.业务系统生成文档浏览地址,用户通过终端进行访 2.用户终端访问文档预览资源地址,请求文档解析器,解析器分为私有云和公有云部署,作用是将文档进行解析成x ...
- java对office、pdf文档在线预览解析(融合进项目中)
最近在项目中要做一个文档的预览,在网上搜了好多demo,都可以实现其功能,但是放在自己的项目中有点复杂. 先说明本人的开发环境(win7+tomcat7+maven+svn+myeclipse),接下 ...
- Office文档在线预览接口服务器
现在的Office文档在线预览基本都是收费的,但这个功能几乎在所有软件系统中都会有这个需求,微软有一个Office online是免费的,但是安装跟配置非常复杂,可以说用难度5颗星来形容,有没有一个更 ...
- 前端【vue】实现文档在线预览功能,在线预览pdf、word、xls、ppt等office文件
前端江太公 前端实现文档在线预览功能 最直接的就是使用XDOC 文档云服务 XDOC可以实现预览以DataURI表示的DOC文档,此外XDOC还可以实现文本.带参数文本.html文本.json文本.公 ...
最新文章
- log4j2配置实例[按小时记录日志文件]
- 表的插入、更新、删除、合并操作_11_更新表的记录
- angularJs关于指令的一些冷门属性
- JAVA——附加作业1——统计员工数
- ibm服务器无显示器,IBM 2128彩色显示器,无论有无连机信号输入均黑屏
- 南京牵手印度软件 本土软件企业态度不一
- 一次性定时器 setTimeout
- TDiocpCoderTcpServer 使用
- JavaScript 验证 API中的setCustomValidity()方法
- SCCM 2007 R7使用手记
- 华为机试(6.17笔试题解析)
- mysql schemata 链接_MYSQL联合注入
- 自然语言处理顶会 ACL2019论文接收列表
- Mac book 合并分区,报错文件系统验证失败的解决办法
- Csv 之 简单解决使用 Excel 打开 csv 出现中文乱码现象
- java 清理页面缓存数据_清除浏览器缓存的几种方法总结(必看)
- 解决安装Visio2016 和office 2016不能兼容问题
- 亚马逊运营技巧,卖家该如何提升BSR排名?
- Qt Creator编写C++中文乱码解决方法
- 计算机专业b区大学,b区考研学校,b区考研学校排名。
热门文章
- 水果品质自动分级的机器视觉系统
- 计算机毕业设计之基于ssm的大学生志愿者服务平台
- javaweb JAVA JSP 停车场管理系统源码停车收费系统(ssm停车场管理 停车场收费)
- 插件79:搜索Google图书
- 计算机应用技术的论文怎么写,计算机应用技术论文摘要怎么写 计算机应用技术论文摘要范文参考...
- jdk自带类实现json解析
- 制作API离线chm帮助文件教程
- android studio 自带模拟器进行 Root 及 Xposed安装
- 最新kali之curl(一)
- 思维导图整理大厂面试高频数组23: 股票问题大总结, 彻底搞懂股票问题