FileSaver.js 封装的blob文件数据流下载方法

6 篇文章 0 订阅

安装file-saver插件: 

npm i file-saver

项目使用elementPlus,进行文件下载的动画效果。

import { ElLoading } from 'element-plus' // 引入加载动画效果
import axios from 'axios';
import { saveAs } from 'file-saver';
let downloadLoadingInstance;

// 创建axios实例
const service = axios.create({
    // axios中请求配置有baseURL选项,表示请求URL公共部分
    baseURL: import.meta.env.VITE_APP_BASE_API,
    // 超时
    timeout: 10000,
});

// 严重是否为Blob数据
const isBlobData = async (data)=> {
  try {
    const text = await data.text();
    JSON.parse(text);
    return false;
  } catch (error) {
    return true;
  }
}
export function download(url, params, filename) {
    downloadLoadingInstance = ElLoading.service({ text: '正在下载数据,请稍候', background: 'rgba(0, 0, 0, 0.7)' });
    return service
        .post(url, params, {
            
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            responseType: 'blob',
        })
        .then(async (data) => {
            const isLogin = await isBlobData(data);
            if (isLogin) { // 如果是Blob数据  
                const blob = new Blob([data],{ type: "application/vnd.ms-excel" }); // 第二个参数为下载的文件的类型
                saveAs(blob, filename);// 调用方法下载
            } else {
                const resText = await data.text();
                const rspObj = JSON.parse(resText);
                const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode.default;
                ElMessage.error(errMsg);
            }
            downloadLoadingInstance.close();
        })
        .catch((r) => {
            console.error(r);
            ElMessage.error('下载文件出现错误,请联系管理员!');
            downloadLoadingInstance.close();
        });
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FileSaver.js是一个JavaScript库,用于在浏览器中保存文件。它允许我们将数据保存为指定文件名和文件类型,并将其保存到指定的目录。但是,由于Web浏览器的安全性限制,我们无法直接将文件保存到指定目录,这样的操作超出了浏览器的权限。 然而,通过使用FileSaver.js,我们可以将文件保存到用户的本地计算机上的默认下载目录,或者让用户选择保存文件的位置。这是因为浏览器提供了一个下载功能,允许用户将服务器上的文件下载到本地。 使用FileSaver.js,我们可以使用以下步骤将文件保存到指定目录中: 1. 引入FileSaver.js库。下载并引入FileSaver.js到HTML文件中,确保正确的路径。 2. 创建一个Blob对象。Blob对象是用于表示二进制大对象(比如文件)的数据类型。我们可以使用Blob对象来包装文件内容。 3. 调用saveAs()函数。使用FileSaver.js提供的saveAs()函数,传入Blob对象和文件名作为参数。这将触发浏览器下载保存文件的弹窗。 在执行以上步骤后,用户可以选择保存文件的目录和文件名,然后点击保存按钮,将文件保存到本地计算机。需要注意的是,由于浏览器的安全性限制,我们无法强制指定文件保存的目录,只能由用户自行决定。 总而言之,FileSaver.js可以帮助我们在浏览器中将文件保存到用户选择的目录,但不能将文件直接保存到指定目录,因为这超出了浏览器的权限限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值