无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

(vue下载文件流) vue进行下载与处理二进制流文件的方法详解 Vue 中下载处理二进制流文件 全网首发(图文详解1)

前沿技术 Micheal 6个月前 (06-19) 104次浏览 已收录 扫描二维码

(vue下载文件流) vue进行下载与处理二进制流文件的方法详解

在Vue中进行下载并处理二进制流文件,通常是指前端向服务器发送请求,服务器返回文件的二进制流,前端再将这个二进制流转换为一个可以下载的文件。以下是一个常见的处理流程,我们以下载一个PDF文件为例。

第一步:发送请求获取二进制流

首先,你需要使用axios等HTTP客户端向服务器发送请求,告知服务器你需要下载的文件类型及名称。在请求中需要明确指定响应类型为'blob',这样axios会自动将响应处理成二进制Blob对象。

import axios from 'axios';

function downloadFile() {
    axios({
        url: '你的文件下载API地址',
        method: 'GET',
        responseType: 'blob', // 关键点
    })
    .then((response) => {
        handleDownload(response.data, '下载的文件名.pdf');
    })
    .catch((error) => {
        console.error('下载文件出错', error);
    });
}

第二步:处理二进制流并创建下载链接

下载的核心在于把获取到的二进制数据创建为一个Blob对象,然后利用URL.createObjectURL创建一个指向该Blob对象的URL,最后通过创建一个a标签来实现下载。

function handleDownload(blob, fileName) {
    // 创建Blob对象
    const fileURL = window.URL.createObjectURL(new Blob([blob]));
    // 创建a标签
    const fileLink = document.createElement('a');
    fileLink.href = fileURL;
    fileLink.setAttribute('download', fileName); // 设定下载名称
    document.body.appendChild(fileLink);

    // 触发点击下载
    fileLink.click();

    // 清除
    document.body.removeChild(fileLink);
    window.URL.revokeObjectURL(fileURL); // 释放掉blob对象
}

完整示例

将上面的代码整合,就可以实现在Vue应用中下载并处理二进制流文件。

<template>
  <div>
    <button @click="downloadFile">下载PDF文件</button>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  methods: {
    downloadFile() {
      axios({
          url: '你的文件下载API地址',
          method: 'GET',
          responseType: 'blob', // 指定响应类型
      })
      .then((response) => {
          this.handleDownload(response.data, '下载的文件名.pdf');
      })
      .catch((error) => {
          console.error('下载文件出错', error);
      });
    },
    handleDownload(blob, fileName) {
        const fileURL = window.URL.createObjectURL(new Blob([blob]));
        const fileLink = document.createElement('a');
        fileLink.href = fileURL;
        fileLink.setAttribute('download', fileName);
        document.body.appendChild(fileLink);

        fileLink.click();
        document.body.removeChild(fileLink);
        window.URL.revokeObjectURL(fileURL);
    }
  }
}
</script>

注释说明

  • axios请求中responseType: 'blob'是告诉axios服务器返回的数据类型是二进制流。
  • handleDownload函数中,先将二进制流转为Blob对象,然后用该Blob对象创建一个可下载的URL,接着创建一个a标签,并设置其href为该URL,并设置download属性来指定下载的文件名。通过模拟点击a标签,触发浏览器的下载操作。
  • window.URL.revokeObjectURL(fileURL);用于释放掉创建的URL对象,以避免内存泄露。

通过以上步骤,可以实现在Vue应用中下载并处理二进制流文件的功能。
(oracle row_number) Oracle 中 row_number()、rank()、dense_rank() 函数的用法详解 Oracle数据库中的三个分析函数:ROW_NUMBER()RANK()和DENSE_RANK() 全网首发(图文详解1)
(dnf工会贡献书) DNF公会贡献证书礼盒怎么得 公会贡献证书礼作用解析 根据DNF公会贡献证书礼盒获取方法 全网首发(图文详解1)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝