以下内容来自「玩转腾讯云」用户原创文章,已取得受权。
本文介绍下如何应用云函数来实现 Office 办公文件的预览
01. 前言
曾几何时,文档预览已经很麻烦,小公司须要购买服务器,自行搭建文件服务器来满足产品的文件预览需要,用户上传的文件经由后端进行转码之后能力预览,技术团队须要搭建文件存储服务及转码服务能力实现根底性能,我司已经就是这么做的。
尽管有公开的微软 Office 预览服务以及 kkfileview 等实现计划,但依然存在诸多问题,比方微软 Office 预览的大小限度,kk 的稍微沉重。难道如果我只是想要一个轻量级的文档服务就那么难吗?
No、No、No,之前始终在关注腾讯云云函数,也在不停基于云函数摸索有意思的性能来满足平时的开发需要,前段时间正好公司我的项目须要用到金山的服务做文件预览,应用成果还能够,那么灵感来了,为什么不能将两个大佬的能力联合一下?
说干就干,腾讯云云函数和金山的文档的整合,我看行。
02. 探讨可行性
首先问题的关键在于通过后端服务去获取预览地址并通过一个网页去承载金山的预览服务,侥幸的是这些都能够通过云函数做到,首先云函数是反对 Node.js 编写的,所以咱们只有应用 Node.js 去申请金山的接口获取预览地址,而后通过设置函数返回类型为网页就能够将预览地址嵌入函数返回的 iframe 中来实现预览性能,是不是很简略易用。
Talk is cheap, show me the code. 上面咱们来践行一下吧~
03. 云函数编写
'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>` }}
04. 问题记录
仔细的同学会发现在云函数返回体局部在这里写的是一段js代码重定向到了一个url。这里之所以没有应用iframe去嵌入预览地址是因为会报获取token失败的谬误,所以退而求其次采取了间接跳转到预览地址的形式来查看文件。
- 体验地址
http://tcb.xuedingmiao.com/office_preview
参考资料
- 应用集成响应返回 HTML
- 金山文档在线预览编辑服务
点击查看演示成果
Serverless 建站惊喜福利大派送!
建站计算资源云函数 SCF、文件存储 CFS、云原生数据库 TDSQL-C、内容散发 CDN、API 网关资源月月送。
点击这里,查看支付惊喜福利!
One More Thing
立刻体验腾讯云 Serverless Demo,支付 Serverless 新用户礼包 腾讯云 Serverless 老手体验 。