vue实现blob文档流下载文件

文章讲述了在使用VUE开发中,后端接口返回不同格式文件时遇到的问题,特别是图片和.zip文件下载后无法打开。作者强调了在HTTP请求中设置responseType为blob的重要性,以确保正确处理文件流并避免乱码或无法打开的问题,最终通过修改封装接口解决了这个问题。

后端接口返回:

.zip文件,图片等

.json,.txt文件下载的数据格式:

VUE页面使用

 async downloadFile(fileId: string, fileName: string) {
      try {
        const res = await API.Defect.downloadDefectFile({
          fileId: fileId,
          fileName: fileName
        })
        if (res.data) {
          downloadFetchFiles(res)
        }
      } catch (error) {
        warn(error, true)
      }
    },

downloadFetchFiles方法代码:

export function downloadFetchFiles(res: { data: BlobPart; fileName: string }) {
  const blob = new Blob([res.data])
  const src = URL.createObjectURL(blob)
  if (src && 'download' in docu
### 实现 VueBlob 文件流预览 为了实现Vue 项目中对来自服务器的文件流进行预览,可以按照如下方法操作: 在发送 HTTP 请求获取文件数据时,需确保 `axios` 或其他 HTTP 客户端库配置了正确的响应类型。对于大多数浏览器来说,当处理 PDF 或图片这类二进制大对象 (BLOB) 数据时,应该将请求头中的 `responseType` 设置为 `'arraybuffer'`[^2]。 接收到的数据应当被转换成一个 JavaScript 的 `Blob` 对象以便于创建 URL 来访问该资源。这里需要注意的是,在构建 `Blob` 对象的时候要指定其 MIME 类型,这通常可以从服务端响应头部字段 `Content-Type` 获取到。 下面是一个简单的例子来展示如何完成这项工作: ```javascript // 假设已安装并导入 axios 库用于发起网络请求 import axios from 'axios'; async function previewFile(url) { try { const response = await axios({ method: 'get', url, responseType: 'arraybuffer', // 确保正确设置此参数 }); // 使用后端返回的内容类型作为 blob 的类型 let contentType = response.headers['content-type']; // 创建一个新的 Blob 对象 let fileBlob = new Blob([response.data], { type: contentType }); // 将 Blob 转换成可点击链接的形式 let fileUrl = window.URL.createObjectURL(fileBlob); // 打开新窗口显示文档 window.open(fileUrl); } catch (error) { console.error('Error fetching or opening the document:', error); } } ``` 这段代码展示了怎样通过 Axios 发送 GET 请求去取得远程文件,并将其转化为可以在本地查看的对象 URL。一旦有了这个 URL,就可以很容易地在一个新的标签页里打开它来进行在线预览了。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值