• 上一节,我们已经安装完毕,安装好了office web apps。大家只要打开浏览器,访问自己的域地址,我的是app.datrix3.com,如果可以看见这个界面 那就说明你安装无问题了。接下来就要通过Wopi协议将OWA集成到...

    我所有的代码都是用go语言编写,你可以直接编译后使用,不用再有其他的操作。
    最近项目实在太忙,这几天才有时间,这次是重头戏,要好好琢磨一下怎么写,才能更简洁的说清楚一切。
    上一节,我们已经安装完毕,安装好了office web apps。大家只要打开浏览器,访问自己的域地址,我的是app.datrix3.com,如果可以看见这个界面

    那就说明你安装无问题了。接下来就要通过Wopi协议将OWA集成到自己的项目中了。

    实现在线预览和编辑的Wopi协议

    首先你要明白什么是wopi协议,相关的资料中,WOPI的全称是“Web Application Open PlatformInterface”,中文名为“Web应用程序开放平台接口协议”。
    要知道,office web apps 可不会允许你直接去调用它相关的接口,网上的一张图就很好的说明了这点:

    你可以看见,在WOPI中,存在WOPI Server(或者称之为WOPI Host)和WOPI Client两种角色,我们可以将WOPI-Client看作我们搭建的OWA服务器,
    而WOPI Server就是我们要自己开发的Wopi服务,在图里可以看见,WOPI Client共向WOPI Server进行了两次请求,分别是Tell me about the file以及Give me the file,所以如果需要实现最简单的在线预览,你需要提供两个接口,如果要实现在线编辑,你还需要一个写入保存的接口。

    第一个接口为:Tell me about the file,我将它定义为GetFileInfo,它的url为
    http://{你自己的owa地址}/api/wopi/files/{file_name}
    这里需要你以JSON形式OWA传参,参数至少要包括如下信息:
    { "BaseFileName": "Sample Document.docx", "OwnerId": "tylerbutler", "Size": 300519, "SHA256":"+17lwXXN0TMwtVJVs4Ll+gDHEIO06l+hXK6zWTUiYms=", "Version":"GIYDCMRNGEYC2MJREAZDCORQGA5DKNZOGIZTQMBQGAVTAMB2GAYA====" }
    BaseFileName: 文件名。
    OwnerId: 文件所有者的唯一编号。
    Size: 文件大小,以bytes为单位。
    SHA256: 文件的256位bit的SHA-2编码散列内容。(Wordweb app必有,excel和ppt可以为null)
    Version: 文件版本号,文件如果被编辑,版本号也要跟着改变。
    下面是我的参数:

    type fileInfo struct {
        BaseFileName   string `json:"BaseFileName"`
        OwnerId        string `json:"OwnerId"`
        Size           int64  `json:"Size"`
        SHA256         string `json:"SHA256"`
        Version        string `json:"Version"`
        SupportsUpdate bool   `json:"SupportsUpdate,omitempty"`
        UserCanWrite   bool   `json:"UserCanWrite,omitempty"`
        SupportsLocks  bool   `json:"SupportsLocks,omitempty"`
    }

    你可以看见,这里有文件的size,sha256,这里要用代码去获取:

    //获取单个文件的大小
    func getSize(path string) int64 {
        fileInfo, err := os.Stat(path)
        if err != nil {
            panic(err)
        }
        fileSize := fileInfo.Size()
        return fileSize
    }
    //获取sha256
    func SHA256File(path string) (string, error) {
        buf, err := ioutil.ReadFile(path)
        if err != nil {
            return "", err
        }
        h := sha256.Sum256(buf)
        return base64.StdEncoding.EncodeToString(h[:]), nil
    }

    GetFileInfo接口代码:

    func GetFileInfo(w http.ResponseWriter, r *http.Request) {
        log.Println("GetFileInfo")
    
        vals := r.URL.Query()
        tmp, ok := vals["access_token"]
        if !ok || len(tmp[0]) == 0 {
            log.Println("access_token not found!")
        }
    
        vars := mux.Vars(r)
        fileName := vars["file_name"]
        if len(fileName) == 0 {
            log.Println("file_name empty!")
        }
        log.Println("file_name: ", fileName)
    
        testFilePath := path.Join(".", fileName)
    
        log.Println("PATH: ", testFilePath)
    
        var info fileInfo
        info.BaseFileName = fileName
        info.OwnerId = "admin"
        info.Size = getSize(testFilePath)
        info.SHA256, _ = SHA256File(testFilePath)
        log.Println("debug: sha256_b42: ", info.SHA256)
        // String value: eIMevgBhTd8Iqh1VjWbfWx7wd5vQvmDxlABMfz+pTiI=
        //info.SHA256 = "eIMevgBhTd8Iqh1VjWbfWx7wd5vQvmDxlABMfz+pTiI="
    
        info.Version = "2222"
        info.UserCanWrite = true
        info.SupportsLocks = true
    
        w.Header().Set("Content-Type", "application/json")
    
        json.NewEncoder(w).Encode(info)
    
        log.Println("GetFileInfo done...")
    }

    接下来是第二个接口Give me the file,我将它定义为GetFileContent,用于WOPI Client获取文件,这个接口的url为:
    http://owa服务器地址/api/wopi/files/{file_name}/contents
    这个接口通过文件流的方式返回文件,代码如下

    func GetFileContent(w http.ResponseWriter, r *http.Request) {
        log.Println("GetFileContent start.......")
    
        vals := r.URL.Query()
        tmp, ok := vals["access_token"]
        if !ok || len(tmp[0]) == 0 {
            log.Println("access_token not found!")
        }
    
        vars := mux.Vars(r)
        fileName := vars["file_name"]
        if len(fileName) == 0 {
            log.Println("file_name empty!")
        }
        log.Println("file_name: ", fileName)
    
        testFilePath := path.Join(".", fileName)
    
        data, err := ioutil.ReadFile(testFilePath)
        if err != nil {
            log.Println("read file err: ", err)
            return
        }
    
        w.Header().Set("Content-type", "application/octet-stream")
        w.Write(data)
        //json.NewEncoder(w).Encode(info)
        log.Println("GetFileContent done !")
    }

    如果你需要实现编辑的功能,你需要实现一个上传接口POSTfile,这个接口和上面那个url除了请求方式不同,其他都是一样的。
    http://owa服务器地址/api/wopi/files/{file_name}/contents
    代码如下

    func PostFileContent(w http.ResponseWriter, r *http.Request) {
        log.Println("PostFileContent start..........")
    
        vals := r.URL.Query()
        tmp, ok := vals["access_token"]
        if !ok || len(tmp[0]) == 0 {
            log.Println("access_token not found!")
        }
    
        vars := mux.Vars(r)
    
        fileName := vars["file_name"]
    
        if len(fileName) == 0 {
            log.Println("file_name empty!")
        }
    
        log.Println("file_name: ", fileName)
    
        testFilePath := path.Join(".", fileName)
    
        log.Println("PATH: ", testFilePath)
    
        body, err := ioutil.ReadAll(r.Body)
    
        if err != nil {
            log.Println("body empty")
        }
    
        ioutil.WriteFile(testFilePath, body, os.ModeAppend)
    
        w.Header().Set("Content-type", "application/octet-stream")
    
        // get Path,get file
    
    }

    现在三个接口都已经实现了,我们来看一下路由和具体的实现代码:

    func main() {
    
        router := mux.NewRouter()
        router.HandleFunc("/api/wopi/files/{file_name}", GetFileInfo).Methods(http.MethodGet)
        router.HandleFunc("/api/wopi/files/{file_name}/contents", GetFileContent).Methods(http.MethodGet)
        router.HandleFunc("/api/wopi/files/{file_name}/contents", PostFileContent).Methods(http.MethodPost)
        //开启8080端口
        err := http.ListenAndServe(":8080", router)
        log.Println(router)
        if err != nil {
            log.Println("http listen err: ", err)
        }
    }

    接下来你就可以go build,然后跑服务了,我这里设置的文件路径都是本目录下的,也就是说,服务在test文件夹下跑起来,那么你的office文件也要放在test文件夹下。

    最后,跑起来服务,应该访问的url如下:

    http://owa服务器地址/we/WordEditorFrame.aspx?WOPISrc=http//本地ip:8080/api/wopi/files/1.docx
    
    http:/owa服务器地址/p/PowerPointFrame.aspx?PowerPointView=ReadingView&WOPISrc=http//本地ip:8080/api/wopi/files/1.pptx
    
    http://owa服务器地址/x/_layouts/xlviewerinternal.aspx?WOPISrc=http//本地ip:8080/api/wopi/files/1.xlsx
    展开全文
  • 使用chrome浏览器,安装 Office Editing for docs,sheets & slides插件,就可以了 缺点是不能直接在线保存,要下载到本地再上传   ...

    使用chrome浏览器,安装 Office Editing for docs,sheets & slides插件,就可以了

    缺点是不能直接在线保存,要下载到本地再上传

     

    https://chrome.google.com/webstore/detail/office-editing-for-docs-s/gbkeegbaiigmenfmjfclcdgdpimamgkj?hl=en

     

    装好后,可以打开本地和线上的office文件:

     

    展开全文
  • 我们可以通过Office Web Apps(OWA)来实现在线编辑word,excel,power point, one note,并集成到自己的网站里去。 1 准备工作 1.1 操作系统 安装了带 Windows Server 2008 R2 x64 Edition 更新程序的 Windows ...

    我们可以通过Office Web Apps(OWA)来实现在线编辑word,excel,power point, one note,并集成到自己的网站里去。

     

    1 准备工作

    1.1 操作系统

    • 安装了带 Windows Server 2008 R2 x64 Edition 更新程序的 Windows Server 2008 R2 Service Pack 1 (SP1) Standard、Enterprise 或 Datacenter 的 64 位版本

    • Windows Server 2012 Standard 或 Datacenter 的 64 位版本

    • 64 位版本的 Windows Server 2012 R2。若要使用此操作系统,则必须使用 Office Web Apps Server Service Pack 1 (SP1)。

    image

    1.2 域要求

    需要二台服务器,一台做域控,另一台安装OWA。

    1号坑:注意域控上安装OWA是不起作用的

     

    详情请参考官方文档:https://technet.microsoft.com/zh-cn/library/jj219435#software

     

    2 创建域控

    Windows Server 2012之搭建域控制器DC

     

    3 加域

     

    3.1 加域方法

    首先把DNS指向域控:

    image

     

     

    然后,开始加域:

    image

     

    3.2 错误处理

    如果加域时出现下面的错误:

    The domain join cannot be completed because the SID of the domain you attempted to join was identical to the SID of this machine

    image

    解决办法如下:

    1. 打开command

    2. 改变路径 %WINDIR%\system32\sysprep

    3.  运行sysprep /oobe /generalize

    这时,就会出现下面的界面,完成后,会重新启动。注意这里可能会把ip会清掉。

    image

     

     

    4 安装OWA

    参考《Office Web Apps安装部署(一)

    5 测试

    5.1 测试view

    运行 /op/generate.aspx">/op/generate.aspx">/op/generate.aspx">http://<ServerName>/op/generate.aspx , 输入文件名,然后生成link,测试在线看的功能:

    image

     

    5.2 测试edit

    下载demo:https://code.msdn.microsoft.com/Building-an-Office-Web-f98650d6

    修改下面配置内容 :

    <add key="appWopiServer"        value="http://youda.hpe.com:81/api/wopi/files/" />

    发布之后,就可以测试了:《Asp.net与office web apps的整合》。

     

    2号坑: 我先尝试用localhost,外部的文件path,都没成功,后面发布到网站上,用这个网站里面的文档就成功了。

    3号坑:这个demo里word的edit功能还没实现。

     

    官方技术文档:  https://wopi.readthedocs.org/en/latest/intro.html

     

     

    在线那些事

    展开全文
  • SharePoint 2013调用Office Web Apps 接上篇内容: 参考地址: https://technet.microsoft.com/zh-cn/library/ff431687.aspx 首先安装好SharePoint2013,我在此部署文档中使用的 SharePoint 2013. 操作系统环境为...

    SharePoint 2013 OWA(Office Web Apps) 连接与配置

    接上篇内容:

    参考地址: https://technet.microsoft.com/zh-cn/library/ff431687.aspx

    首先安装好SharePoint2013,我在此部署文档中使用的 SharePoint 2013.

    操作系统环境为:windows server 2012.

    1. 安装好SharePoint  2013之后。以管理员身份运行下列PowerShell(运行SharePoint2013 命令管理器)

    New-SPWOPIBinding -ServerName <WacServerName> -AllowHTTP
    Remove-SPWOPIBinding -All:$true     //这个命令是移除SharePoint服务器和OWA 服务器的连接
    
    其中<WacServerName>为Office Web Apps的域名全称(FQDN)例如 按照之前所说OWA 服务器  FQDN  是    New-SPWOPIBinding -ServerName testspdb -AllowHTTP
    

    上述PowerShell命令的意思是建立sharepoint文档库中Office文档的打开关联程序为Office Web Apps.

    成功的话会返回下面的信息,如图所示

    注意:由上图可以清楚的看的WopiZone 是Internal-http 所有你要做相对应的修改。

    2. 之后再运行下列命令:

    Get-SPWOPIZone

    (WOPI指的是Web 应用程序开放平台接口协议)

    上述PowerShell命令意思是查看本sharepoint服务器与其他服务器的通信协议。

    运行之后会返回如下信息:


    新装的系统很多是https。按照顺序执行代码即可。


    返回internal-https,意思是接口协议用的是https。

    一般情况下,在内网用http协议就足够了。

    所以要改成http协议,用下列命令:

    Set-SPWOPIZone -zone "internal-http"

    再用Get-SPWOPIZone查看,返回的是internal-http,修改成功。


    3.

    然后再修改sharepoint与Office Web Apps的认证关系。要把AllowOAuthOverHttp这个属性设置为True.

    用下列命令:

    (Get-SPSecurityTokenServiceConfig).AllowOAuthOverHttp

    返回的如果为false.


    那么就应该用下列命令设置此属性为true.

    $config = (Get-SPSecurityTokenServiceConfig)
    $config.AllowOAuthOverHttp = $true
    $config.Update()

    如下图所示:


    至此,Office Web Apps与SharePoint2013的关系就已经建立好了。可以新建一个SharePoint网站看一下效果。

    注意:创建文档时,不要用系统帐户 ,否则创建Office文档会出错,错误如下图


    使用有权限的非系统账户,如下图所示:

    新建文档的时候,会多出一个菜单,提示新建哪种Office文档。


    还提供Office文档的预览效果,如下图所示。


    下图的实例是一个编辑Excel功能,其实点击打开相应文档(word,excel 等等),会提供类似Office桌面版的效果,会让你忘记这是一个web程序,仿佛就是一个桌面版的Office.


    单击编辑工作簿--在下拉框里选择 ---在Excel--Web App 中编辑

     

    如果不能访问的话,请检查一下客户端是否能够解析OWA的地址。 

    检查方法如下,打开无法打开或者报错404 的时候请使用开发工具找到错误地址,检查之。

    展开全文
  • Office Online Server 文档在线预览编辑【速成篇】操作系统 Windows Server 2012 R2 部署 Office Online Server官方手册 参照文档 仅执行步骤 1:为 Office Online Server 安装必备软件 问题1:Windows PowerShell...

    操作系统 Windows Server 2012 R2

    下载地址 密码: h6cq

    部署 Office Online Server

    官方手册
    参照文档 仅执行步骤 1:为 Office Online Server 安装必备软件
    问题1:Windows PowerShell 无法下载 安装失败,指定备用源(指定操作系统安装源文件,请在Windows PowerShell 执行的命令后面添加 -Source D:\sources\sxs 路径具体,然后在执行)。

    Office Online Server 2016

    下载地址 密码: fic3

    Office Online Server 英文语言包

    下载地址 密码: 9sa4

    部署 Office Online Server 场

    官方手册

    修改 Office Online Server 场

    Set-OfficeWebAppsFarm
    安装完成后验证:http://servername/hosting/discovery
    :这是一个说明文档,里面记录了各种处理方式,程序生成文档在线预览地址时用到。

    场景1:SharePoint2016配置

    参考博客

    场景2:邮件Exchange 配置

    参考博客

    场景3:Office Online Server与网站集成

    官方源代码下载地址
    源代码下载地址
    修改的地方1:App_Data/Discovery.xml
    全部替换红圈处的名称为具体的Servername
    根据要求可以定义文件类型及预览编辑方式,地址为http://servername/hosting/discovery文档中包括的,仅修改Servername(图中标记)即可。
    修改地方2:Web.config
    api接口地址修改
    这是api接口的地址,等发布部署完这个源代码知道网站地址后在改这个地方(仅网站名及端口)即可。

    发布部署源代码

    将源代码(MVC网站)发布,可以直接部署到这个服务器上(IIS新增一个网站,端口号自定义别和装的Office Online Server 应用冲突就可以。
    网站目录
    浏览部署的网站,首页菜单中点击【API Help】就是修改地方2的api接口了
    浏览部署的网站 首页上点击获取连接地址

    注:请仔细阅读下面文字
    只要web网站按照标准,实现了WOPI的接口,那么就可以调用Office Web Apps,存放Office文档的web应用叫WOPI Host。
    所以,Office Web Apps充当的就是WOPI Client的角色。
    SharePoint,Exchange,自己开发的文档管理系统充当的就是WOPI Host的角色。

    展开全文
  • office web apps 整合到自己项目中(wopi实现在线预览编辑) 借助office web apps实现在线预览和在线编辑 我所有的代码都是用go语言编写,你可以直接编译后使用,不用再有其他的操作。 最近项目实在太...
  • SharePoint 集成OWA概述

    2017-12-24 19:10:59
    简介 OWA服务,也就是Office Web Application,微软提供的可以在线查看和编辑Office系列文档的服务,包括Word/Excel/PPT/OneNote。我们可以通过OWA服务和SharePoint集成,在线查看和编辑SharePoint站点文档库中的...
  • 我们在做完office 365混合部署后,迁移到exchange online上的邮箱用户登录OWA有2种方法:1) 继续使用本地OWA地址登录,如:mail.contoso.com,但通过此方式访问在我们输入完用户名密码后,会弹出对话框,告知用户...
  • Office的文档处理能力是非常强大的,但是它是本地资源... 目前还说,将Office编辑的能力与B/S结合起来的方法主流的方案有三种: DsoFarmer OCX嵌入网页在线编辑方案:在很多年前微软发布了一段C++开发源代码的OCX控...
  • SharePoint 2016 安装和部署office line 一部署office online 重要声明;由于没有中文版本,再加上本人英文实在太烂,有洁癖的请自动走开。本文是介绍安装规划。 Office Online server 软硬件需求  我称其为OOS...
  • 本课程以SharePoint 2013 Server版本为环境,为大家演示介绍如何在上面集成Office Web Application 2013,以达到Office系列文档,在SharePoint环境中可以在线创建、查看、编辑和协作的效果。
  • Office web app提供了很全面的功能,...如果项目只用到了文档的在线预览功能,直接使用owa服务生成的url或者iframe标签就能够在网页中浏览office格式的文档。但是如果希望使用其他功能,还是需要自己开发wopi host。
  • WOPI主机协议在此位置定义:http://msdn.microsoft.com/en-us/library/hh643135(v=office.12).aspx 有一个很好的概述,在Office开发团队的博客文章中介绍WOPI:...
  • go语言编写owa,实现Office Weq App整合进自己的项目中。(在线编辑office)请先了解OfficeWebApp在下载此资源
  • Office Web Apps 2013 修改Excel在线查看文件大小限制  前言  最近搭建了一个OWA 2013环境,帮客户实现在线查看Excel文档,不过,使用过程中出现了错误,文件大小超过10MB就无法预览了,查了好久...
  • OWA默认是安装好的,在客户端使用浏览器输入http://域名(IP)/exchange,即可登录。不过通过http去输入用户名和密码,会存在不安全因素,如可以使用抓包工具,抓到用户的用户名和密码。为了实现OWA安全,可以安装...
  • 关于sharepoint2013 使用 OWA一些答疑 1,是否能够在域外安装,使用? 答案;不能。如果没有加入域安装不能成功,如果不在域内会出现如下错误。 2,是否收费? 使用 Office Web Apps 查看文件是免费的,但当 Office...
1 2 3 4 5 ... 20
收藏数 384
精华内容 153