记录oss链接类型PDF预览

需求

PDF文件要预览而不是一点击就下载。

问题

问题:我们上传的文件都存储在阿里云,返回的链接都是oss的,默认点击都是下载。

采用的方案

最初的时候跟后端沟通,它提供一个新的文件预览接口,我只要将文件地址当参数传给他,就可以,这样打开一个新的页面就可以预览了。我们之前有类似的需求也是这样实现的。但是这次我们遇到的问题是,接口所用的域名是没有备案过的,不能直接通过浏览器访问,而因为业务上的问题,这个域名也不能备案,所以这个方案就被否了。

接下来通过查阅资料,了解到oss可以绑定一个三级域名实现预览,但是也涉及到域名备案,仍旧不能实现。

所以这个预览的重担只能通过前端去解决了。最后决定用PDF.js,直接用链接会跨域。然后用base64的方式,需要后端配合返回base64的格式,但是我后端返回的base64格式,跟官方给的格式有点不一样,直接用PDF解析不了,因为时间的原因我也没有研究,就暂时又换了方案。

最后用iframe的方式,将PDF转成的base64字符串直接作为src值就可以了,记得base64前面要拼接文件类型。

转载于:https://juejin.im/post/5bdab92bf265da39614616ef

要实现在网页直接预览阿里云存储的 PDF 文件,可以使用阿里云的 OSS(Object Storage Service)和PDF.js库。具体步骤如下: 1. 将 PDF 文件上传到阿里云 OSS 上,获得文件的访问地址。 2. 在网页中引入 PDF.js 库,并创建一个容器用于显示 PDF 文件。 3. 使用 XMLHttpRequest 对象获取 PDF 文件的二进制数据。 4. 使用 PDF.js 提供的 API 将二进制数据转换成 PDF 文件内容,并在容器中显示出来。 以下是示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>预览PDF文件</title> <script src="https://cdn.bootcdn.net/ajax/libs/pdf.js/2.7.570/pdf.min.js"></script> </head> <body> <div id="pdf-container"></div> <script> // 获取 PDF 文件的二进制数据 var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://your-bucket.oss-cn-hangzhou.aliyuncs.com/your-file.pdf', true); xhr.responseType = 'arraybuffer'; xhr.onload = function(e) { if (this.status == 200) { // 将二进制数据转换成 PDF 文件内容 var pdfData = new Uint8Array(this.response); pdfjsLib.getDocument(pdfData).promise.then(function(pdf) { // 在容器中显示 PDF 文件 pdf.getPage(1).then(function(page) { var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); var viewport = page.getViewport({scale: 1}); canvas.width = viewport.width; canvas.height = viewport.height; document.getElementById('pdf-container').appendChild(canvas); page.render({canvasContext: context, viewport: viewport}); }); }); } }; xhr.send(); </script> </body> </html> ``` 在实际使用中,需要将上述代码中的“your-bucket”和“your-file.pdf”替换成实际的阿里云 OSS 存储桶名称和 PDF 文件访问路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值