前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转腾讯云】腾讯云云函数结合金山文档打造轻量级office在线预览服务

【玩转腾讯云】腾讯云云函数结合金山文档打造轻量级office在线预览服务

原创
作者头像
薛定喵君
修改2021-04-06 10:28:23
1.3K0
修改2021-04-06 10:28:23
举报
文章被收录于专栏:薛定喵君薛定喵君

本文介绍下如何使用云函数来实现office办公文件的预览

前言

曾几何时,文档预览曾经很麻烦,小公司需要购买服务器,自行搭建文件服务器来满足产品的文件预览需求,用户上传的文件经由后端进行转码之后才能预览,技术团队需要搭建文件存储服务及转码服务才能实现基础功能,我司曾经就是这么做的。

虽然有公开的微软office预览服务以及kkfileview等实现方案,但仍然存在诸多问题,比如微软office预览的大小限制,kk的略微繁重。

难道如果我只是想要一个轻量级的文档服务就那么难吗?No、No、No,之前一直在关注腾讯云云函数,也在不停基于云函数探索有意思的功能来满足平时的开发需求,前段时间正好公司项目需要用到金山的服务做文件预览,使用效果还可以,那么灵感来了,为什么不能将两个大佬的能力结合一下?说干就干,腾讯云云函数和金山的文档的整合,我看行。

探讨可行性

首先问题的关键在于通过后端服务去获取预览地址并通过一个网页去承载金山的预览服务,幸运的是这些都可以通过云函数做到,首先云函数是支持nodeJS编写的,所以我们只要使用nodejs去请求金山的接口获取预览地址,然后通过设置函数返回类型为网页就可以将预览地址嵌入函数返回的iframe中来实现预览功能,是不是很简单易用。

talk is cheap,show me the code.下面我们来践行一下吧~

云函数编写

代码语言:txt
复制
'use strict';
const rp = require('request-promise')
const officeBaseUrl = '私有服务端?fileUrl='
exports.main = async (event, context) => {
    let fileUrl = 'http://默认下载的预览文件地址.doc'
    let param = {}
    if (event.queryStringParameters) {
        param = { ...event.queryStringParameters }
    } else {
        param = { ...event }
    }
    if (param.url) {
        fileUrl = param.url
    }
    let previewRes = await rp({ url: officeBaseUrl + fileUrl })
    previewRes = JSON.parse(previewRes)
    return {
        statusCode: 200,
        headers: {
            "content-type": "text/html"
        },
        body: `<script>location.replace("${previewRes.data.wpsUrl}");</script>`
    }
}

问题记录

细心的同学会发现在云函数返回体部分在这里写的是一段js代码重定向到了一个url。这里之所以没有使用iframe去嵌入预览地址是因为会报获取token失败的错误,所以退而求其次采取了直接跳转到预览地址的方式来查看文件。

体验地址

http://tcb.xuedingmiao.com/office_preview

视频内容

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 探讨可行性
  • 云函数编写
  • 问题记录
  • 体验地址
  • 参考资料
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档