后端返回的文件流进行文件预览

该篇文章介绍了如何在JavaScript中定义一个方法,接收接口返回的文件流,根据文件类型(如PDF、JPEG、PNG等)转换MIME类型,并利用`URL.createObjectURL`和`Blob`创建可预览的链接,以实现文件预览功能。

 接口返回的文件流进行预览处理

methods: {
    openImg(url) {
      preview({fileUrl: url}).then((res) => {
        let type = url.substring(url.lastIndexOf('.') + 1, url.length).toLowerCase()
        let docType = 'application/pdf'
        if (type == 'gif') {
          docType = 'image/gif'
        } else if (type == 'jpeg' || type == 'jpg') {
          docType = 'image/jpeg'
        } else if (type == 'png') {
          docType = 'image/png'
        }
        let binaryData = []
        binaryData.push(res)
        let pdfUrl = window.URL.createObjectURL(
          new Blob(binaryData, { type: docType })
        )
        window.open(pdfUrl)
      })
    }
}

前端实现预览后端返回文件流,通常涉及以下几个关键步骤和文件类型处理方式: ### 文件流获取与处理 当后端返回的是文件流时,前端需要通过 `axios` 或 `fetch` 请求获取数据,并将响应类型设置为 `blob`。这样可以确保浏览器能够正确解析并处理二进制数据[^1]。 例如,通过 `axios` 获取 PDF 文件流的代码如下: ```typescript const response = await axios.get(config.VITE_APP_API_URL_PREPROD + '/file/downloadFile', { params: { filepath: data.filePath }, responseType: 'blob' }); ``` ### 图片文件预览 对于图片类型的文件流,可以直接将其转换为 Blob URL 并通过 `<img>` 标签进行预览[^3]: ```html <img :src="src" /> ``` JavaScript 部分处理逻辑如下: ```javascript T.ajax({ url: xxx, beforeSend: xhr => { xhr.responseType = "blob"; }, dataFilter: e => { let flow = e.response; let blob = new Blob([flow]); let url = window.URL.createObjectURL(blob); this.src = url; } }); ``` ### PDF 文件预览 PDF 文件流预览可以通过 `<iframe>` 或 `window.open` 来实现。以下是一个使用 `window.open` 的示例: ```typescript let pdfUrl = window.URL.createObjectURL(new Blob([response.data], { type: "application/pdf" })); const newWindow = window.open(pdfUrl, '_blank'); if (newWindow) { newWindow.onload = () => { newWindow.focus(); }; } else { ElMessage.warning('请允许弹出窗口以预览文件'); } ``` 此外,也可以使用 `<iframe>` 来渲染 PDF 文件流[^3]: ```html <iframe :src="src"></iframe> ``` JavaScript 部分代码如下: ```javascript T.ajax({ url: xxx, beforeSend: xhr => { xhr.responseType = "blob"; }, dataFilter: e => { let flow = e.response; let blob = new Blob([flow], { type: 'application/pdf;charset=utf-8' }); let src = window.URL.createObjectURL(blob); this.src = src; } }); ``` ### 文本文件预览 文本文件预览可以使用 `<iframe>` 或 `<textarea>` 来实现。以下是一个使用 `<iframe>` 的示例: ```html <iframe :src="src"></iframe> ``` JavaScript 部分代码如下: ```javascript T.ajax({ url: xxx, beforeSend: xhr => { xhr.responseType = "blob"; }, dataFilter: e => { let flow = e.response; let blob = new Blob([flow]); let src = window.URL.createObjectURL(blob); this.src = src; } }); ``` ### Office 文件预览 对于 Office 文件(如 Word、Excel、PPT),可以使用 Microsoft 提供的在线预览服务。该服务通过在文件地址前添加特定路由来实现预览: ```javascript let preUrl = 'https://view.officeapps.live.com/op/view.aspx?src=' + selfUrl + (token); ``` 然后在页面中使用 `<iframe>` 进行渲染: ```html <iframe :src="preUrl"></iframe> ``` ### 音视频文件预览 对于音视频文件,可以使用 HTML5 的 `<video>` 或 `<audio>` 标签进行预览。以下是一个通用的实现方式: ```html <video :src="preUrl" controls></video> <audio :src="preUrl" controls></audio> ``` JavaScript 部分代码如下: ```javascript let preUrl = host + selfUrl + token; ``` ### 相关问题 1. 如何在前端实现 Word 文件预览? 2. 如何通过 HTML5 标签预览音频文件? 3. 如何处理 PDF 文件流的跨域问题? 4. 如何在 Vue 中实现图片文件流预览? 5. 如何通过 Axios 获取文件流并转换为 Blob?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值