前端常见下载处理方案

博客介绍了前端常见的三种下载处理方案。a标签下载适用于静态文件且存放地点不变的情况;Form表单下载可做特殊处理并传入更多参数;Blob流下载能更灵活处理不同状态,推荐使用该方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载是我们项目中常常会遇到的需求,不同的下载方案能呈现不同的效果,近期归纳下作者系统中用到常见几种下载处理方案

a标签下载

<a href="test.xlsx" download="test.txt">下载</a>
复制代码

这种是我们常见的下载静态文件的处理方式,这种适用于项目文件是静态的以及存放地点不变动的。download属性还可以对文件命名处理

Form表单下载

<form method="get" target="name" action="test.com">
    <input type="hidden" name="token" value="token">
    <input type="hidden" name="url" value="/api/download">
</form>
复制代码

表单的下载可以做特殊的传值处理,也可以传入更多的参数;请求方式也多种多样。

Blob流下载

用上面方式下载处理,当用户点击下载时,前端不能够很好的捕捉到请求的状态,而用Blob我们可以更灵活的来处理不同状态。

Blob 对象表示一个不可变、原始数据的类文件对象。

简单的示例:

const blob = response;
const reader = new FileReader();
reader.readAsDataURL(blob); // 转换为base64,可以直接放入a表情href
const disposition = decodeURI(xhr.getResponseHeader('Content-Disposition')); // 文件名处理
const dispositionArray = disposition.split('filename=');
const name = dispositionArray[dispositionArray.length - 1];
reader.onload = function(e) {
  // 转换完成,创建一个a标签用于下载
  const a = document.createElement('a');
  a.download = name;
  a.href = e.target.result;
  document.body.appendChild(a);
  a.click();
  setTimeout(() => {
    document.body.removeChild(a);
  }, 100);
};
复制代码

通过后台返回的数据来判断是否显示错误提示,也可以根据接口不同状态值来显示。

const reader = new FileReader();
reader.onload = e => {
  if (e.target.result.includes('"data":""')) {
    const result = JSON.parse(e.target.result);
    console.log(result.msg);
  }
};
reader.readAsText(response); // 读取指定的Blob中的内容,result属性中将包含一个字符串以表示所读取的文件内容。
复制代码

总结

以上的三种处理方案是我们常见的前端下载简单汇总,方案不同,效果不同,不过还是推荐Blob方式下载,这种处理方式,可以更加灵活的捕捉到不同状态,前端可以更加方便的处理。

项目建设方案书 网站建设目标 ------------------------------------------------------------------------------------------8 1.1网站目标 ------------------------------------------------------------------------------------------9 1.2 网站目标与期望 --------------------------------------------------------------------------------9 1.3 网站设计原则 -------------------------------------------------------------------------------- 9 1.4解决方案 ----------------------------------------------------------------------------------------10 二、网站分析与建议---------------------------------------------------------------------------------- 10 三、网站整体结构 -----------------------------------------------------------------------------------------11 四、主要栏目及网站管理功能说明 --------------------------------------------------------------------12 4.1网站首页 ----------------------------------------------------------------------------------------13 4.2新闻中心 ----------------------------------------------------------------------------------------13 4.3介绍 ------------------------------------------------------------------------------------------13 4.4服务展示------------------------------------------------------------------------------------------13 4.5销售网络 ----------------------------------------------------------------------------------------15 4.6企业文化 ----------------------------------------------------------------------------------------16 4.7用户社区 ----------------------------------------------------------------------------------------16 4.8系统功能需求 ----------------------------------------------------------------------------------16 五、网络推广 -----------------------------------------------------------------------------------------------17 六、网站建设进度及实施过程 ------------------------------------------------------------------------18 6.1 项目合作与成员 ---------------------------------------------------------------------------18 6.2 项目实施时间表 ---------------------------------------------------------------------------18 七、费用预算 (附件一)-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值