前端文件下载

本文介绍了前端通过文件流和URL进行文件下载的两种方法。在使用Blob进行文件下载时,需要注意设置responseType为'blob',并利用创建ObjectURL进行下载操作。当遇到res值为undefined的问题时,可能涉及Mockjs或axios封装的处理。另一方面,通过后端提供的URL可以直接触发下载。确保检查数据类型并正确处理,以避免下载问题。
摘要由CSDN通过智能技术生成

前端文件下载有两种方式:
1、通过文件流进行下载
2、通过url进行下载

一、通过文件流进行下载
后端返回的数据是blob格式的,在请求数据的时候应该加上responseType : ‘blob’,不然下载下来打开之后是乱码。对blob的数据进行处理,就可以进行文件下载,这里示例excel下载:

let filename = '文件名.xls';
let blob = new Blob([res])//res即为blob数据,请注意自己的数据形式
let url = window.URL.createObjectURL(blob,{type: 'application/vnd.ms-excel'});
const link = document.createElement('a');
link.style.display = 'none';
link.href = url;
link.setAttribute('download', filename);
document.documentElement.appendChild(link);
link.click();
document.documentElement.removeChild(link);

找了很久的问题,res的返回值为undefined,确认一下几种情况:
1、mockjs会对axios请求进行影响,会删除返回的blob数据,注意排除是否是这个问题,mockjs是模仿后端数据交互的一个东西。
2、找了很久,看见了对axios进行封装的时候,请求响应删除了blob的数据,所以需要做一个判断,如果类型是blob类型的数据,就应该返回,这样才有数据。

if(Object.prototype.toString.call(response.data) === "[object Blob]"){
     return response.data
}

就这么个破问题,找了好久,甚至自己重新写了一个原生axios进行请求,妈的。

2、后端提供url前端进行下载:

window.location.href=url

调用直接下载接即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值