`

Office Web Apps Server作为Client,Java代码作为Host实现Office在线预览

阅读更多

 

 1.先要在Windows Server 20082012上安装好Office Web Apps Server,网上已有相关文章,此处不再赘述。Windows Server 2008部署步骤:http://www.cnblogs.com/yanweidie/p/4516164.html 微软官方地址:https://technet.microsoft.com/zh-cn/library/jj219455.aspx

2.服务安装成功后,输入http://owa.domain.com/hosting/discoveryhttp://owa.domain.com/op/generate.aspxowa.domain.com为自己配置的域名,如果自己配置的域名访问失败,将对应的ip添加到hosts文件中即可,也可直接访问ip,即http://192.168.1.11/hosting/discoveryhttp://192.168.1.11/op/generate.aspx。效果图如下:



 

 

 

3.重点:编写java代码,实现WOPI协议

下面代码是用Servlet实现的,先用Filter拦截用户请求,拦截器配置:

@WebFilter("/wopi/*")

 

1.CheckFileInfo服务:需要返回一个JSON字符串,包含5个基本信息:BaseFileName(文件名), OwnerId(文件所有者的唯一编号), Size(文件大小,以bytes为单位), SHA256(文件的256bitSHA-2编码散列内容), Version(文件版本号)

好多资料都介绍说返回这5个数据,但经本人亲测,在Java中实现不需要SHA256,需要AllowExternalMarketplace,值为true,根据微软官网参数介绍:AllowExternalMarketplace: A Boolean value that indicates the WOPI client MAY allow connections to external services referenced in the file (for example, a marketplace of embeddable JavaScript apps). If this value is false, then the WOPI client MUST NOT allow such connections.


2.GetFile
服务:Stream流的方式返回该文件

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
                HttpServletRequest httpRequest = (HttpServletRequest)request;
                HttpServletResponse httpResponse = (HttpServletResponse)response;

                String uri = httpRequest.getRequestURI();       ///wopihost/wopi/files/excel.xlsx
                //解决中文乱码问题
                String fileUri = URLDecoder.decode(uri.substring(uri.indexOf("/wopi/") + 1, uri.length()),"UTF-8");     //  /wopi/files/test.docx
                String filePath = request.getServletContext().getRealPath("/")+fileUri;

                if(fileUri.endsWith("/contents")) {     // GetFile :返回文件流
                        filePath = filePath.substring(0, filePath.indexOf("/contents"));
                        getFile(filePath, httpResponse);

                } else {        // CheckFileInfo :返回json
                        response.setCharacterEncoding("UTF-8");
                        response.setContentType("application/json;charset=UTF-8");
                        PrintWriter out = null;
                        try {
                                out = response.getWriter();
                                out.write(FileUtils.checkFileInfo(filePath));
                        } catch (IOException e) {
                                e.printStackTrace();
                        } finally {
                                if (out != null) {
                                        out.close();
                                }
                        }
                }
                return;
        }

其中getFile(filePath, httpResponse);是返回文件下载流,FileUtils.checkFileInfo(filePath)是返回文件的JSON信息。

getFile(filePath, httpResponse)

private HttpServletResponse getFile(String path, HttpServletResponse response) {
        try {
            // path是指欲下载的文件的路径。
            File file = new File(path);
            // 取得文件名。
            String filename = file.getName();
            String contentType = "application/octet-stream";
            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 设置responseHeader

            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("utf-8"),"ISO-8859-1"));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType(contentType);
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return response;
    }

FileUtils.checkFileInfo(filePath)实现:

/**
         * 获取文件基本信息
         * @param filePath      文件路径
         * @return
         */
        public static String checkFileInfo(String filePath) {
                File file = new File(filePath);
                String baseFileName = null;     //文件名
                String ownerId = null;  //文件所有者的唯一编号
                long size = 0;  //文件大小,以bytes为单位
                //String sha256 = null; //文件的256bitSHA-2编码散列内容
                long version = 0;       //文件版本号,文件如果被编辑,版本号也要跟着改变
                if(file.exists()) {
                        // 取得文件名。
                        baseFileName = file.getName();
                        size = file.length();
                        // 取得文件的后缀名。
                        //String ext = baseFileName.substring(baseFileName.lastIndexOf(".") + 1);
                        ownerId = "admin";
                        //sha256 = new SHAUtils().SHA(FileUtils.readByByte(file), "SHA-256");
                        version = file.lastModified();
                }

                return "{\"BaseFileName\":\"" + baseFileName + "\",\"OwnerId\":\"" + ownerId + "\",\"Size\":\"" + size
                                + "\",\"AllowExternalMarketplace\":\"" + true + "\",\"Version\":\"" + version + "\"}";
        }

代码实现后访问http://127.0.0.1:8080/wopihost/wopi/files/test.docx则出现如下页面:



 

访问http://127.0.0.1:8080/wopihost/wopi/files/test.docx/contents则下载该文件

访问http://owa.domain.com/wv/wordviewerframe.aspx?WOPISrc=http%3A%2F%2F192.168.1.11%3A8080%2Fwopihost%2Fwopi%2Ffiles%2Ftest.docx

注意:

1.WOPISrc后的ip地址要写真实的ip地址,否则会转换失败

2.不同类型文档的访问地址对应的地址不同

3.如果文件名为中文名,要进行两次URLEncoder.encode,即URLEncoder.encode(URLEncoder.encode(fileName,"utf-8"),"utf-8"),否则预览失败,这与微软的内部实现有关。

实现效果图如下:



 

 

 

 

相关文章:

Office Web Apps Server的介绍:https://blogs.technet.microsoft.com/office_resource_kit/2012/09/11/introducing-office-web-apps-server/

WOPI协议介绍:https://blogs.msdn.microsoft.com/officedevdocs/2013/03/21/introducing-wopi/#comments

实现WOPI协议(C#):https://blogs.msdn.microsoft.com/scicoria/2013/07/22/building-an-office-web-apps-owa-wopi-host/

微软的官方文档:https://technet.microsoft.com/zh-cn/library/jj219456(v=office.15).aspx

其它相关资料:http://www.tuicool.com/articles/ayeENz

http://www.cnblogs.com/poissonnotes/p/3267190.html

http://www.cnblogs.com/poissonnotes/p/3277280.html

 

  • 大小: 184.9 KB
  • 大小: 84.8 KB
  • 大小: 14.8 KB
  • 大小: 56.9 KB
  • 大小: 171 KB
  • 大小: 112.7 KB
3
8
分享到:
评论
1 楼 i2019 2016-03-31  
   

相关推荐

    Office Web Apps Server

    微软的Office Web Apps Server和SharePoint 2013结合,提供了在线查看和编辑Microsoft Office文档的能力,极大地提升了远程工作的便捷性。本文将详述如何在SharePoint 2013环境中安装和配置Office Web Apps Server。...

    Office Web apps Server搭建.doc

    您可以安装 Office Web Apps Server 作为单服务器 Office Web Apps Server 场,或者作为多服务器、负载平衡 Office Web Apps Server 场。您可以使用物...

    office web apps整合

    本文将详细介绍如何在Java环境中整合Office Web Apps,以便用户可以在线预览和编辑Office文档。 首先,我们需要了解整合的基本流程: 1. **部署Wopi Host**: WOPI(Web Application Protocol Interface)是Office ...

    规划 Office Web Apps Server1

    - **软件要求**:Office Web Apps Server可以作为单服务器或多服务器负载平衡部署,但不能与SharePoint 2010产品或Exchange Server 2013兼容。操作系统应为64位的Windows Server 2008 R2 SP1、Windows Server 2012或...

    部署 Office Web Apps Server1

    【部署 Office Web Apps Server】是针对IT专业人员的一项任务,主要目的是在本地环境中设置Office Web Apps Server,以便与SharePoint 2013和Lync Server 2013协同工作,提供在线预览和编辑Office文档的功能。Office...

    Office Web Apps示例程序

    OWA最初设计是作为Exchange Server的一部分,用于通过Web访问电子邮件,但后来发展成为一个独立的服务,提供了在线处理Office文档的能力。它不仅适用于企业环境,也为个人用户提供了便利,可以在任何支持Web浏览器的...

    ASP.net office web apps整合

    ASP.NET Office Web Apps 整合是一项技术,它允许开发者在Web环境下实现Microsoft Office应用程序(如Word、Excel)的功能,让用户可以在浏览器中查看、编辑和协作处理Office文档。这个技术结合了ASP.NET的强大Web...

    Office web app server2013安装与部署

    1. **配置 SharePoint Server 作为 WOPI Host**:需要在 SharePoint Server 上配置相应的设置,使其能够与 Office Web App Server 通过 WOPI 协议进行通信。 2. **配置 Office Web App Server 以识别 SharePoint ...

    Office Web Apps Server-Product Description.docx

    Office Web Apps Server-Product Description.docx

    Office Web Apps 2013 安装配置文档

    Office Web Apps 2013 是微软提供的一款在线版本的办公软件套件,它使得用户能够在Web浏览器中查看、编辑和共享Word、Excel、PowerPoint和OneNote文档。本安装配置文档主要涵盖如何在Windows环境中安装和配置Office ...

    OfficeWebApp部署 &常见问题

    ### Office Web Apps Server 部署与常见问题详解 #### 一、系统要求与环境准备 根据提供的部分内容,我们可以了解到部署Office Web Apps Server的基本要求之一是**Windows Server 2012**。此外,还强调了安装...

    Office Web Apps系统调研

    综上所述,Office Web Apps不仅为用户提供了一个高效便捷的在线文档处理平台,还为开发者提供了丰富的API接口,使得第三方应用能够轻松集成Office文档的浏览与编辑功能。然而,针对Word文档的编辑功能实现上存在一定...

    Office Web Apps and Skype

    首先,Office Web Apps服务器并非Skype for Business Server的一个角色,它实际上是Office服务器家族的一部分,服务于Skype for Business以及Exchange和SharePoint等其他微软服务器产品。它提供了一个平台,使用户...

    OFFICE_WEB_APPS_SERVER_2013.ISO

    Office在线编辑预览工具

    ASP.NET在线打开Office 文件实例

    实现这个功能的关键在于利用Office Web Apps Server(OWAS)或Microsoft 365中的在线编辑功能。OWAS是微软推出的一个独立服务器产品,可以部署在企业内部,为用户提供安全的在线文档查看和编辑。如果您的组织订阅了...

    服务器搭建 office web apps 实现线文档预览-附件资源

    服务器搭建 office web apps 实现线文档预览-附件资源

    ows-project:office web app server 文档预览部署&&wopi 集成

    office web app server 文档预览服务安装 docs msdn 安装以及部署说明文档,注意需要域环境 wopi 接口demo 项目使用spring boot jdk 1.8 安装部署 需要的软件包 链接: 密码:pamu 我安装使用的是windows server 2012 ...

Global site tag (gtag.js) - Google Analytics