前端 使用a标签的下载踩坑

本文介绍了一种使用JavaScript实现文件下载的方法,解决了不同浏览器兼容性问题,并通过创建a标签完成文件下载功能。

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

起因: 最近在开发中, 需要用到下载文件的操作, 刚开始直接使用想使用a标签来达到效果, 但是产品下载后,发现文件名不对, 遂使用html5 的download属性,但是在不同源的下, 以及兼容性(谷歌浏览器支持)问题上, 导致这个效果不能很好实现

– fileSave.js 也可以实现
参考其他用法:

  1. 下载方法1
  2. 下载方法2

后来使用 js 下载本地的临时文件, 在创建 a 标签达到效果

function getBlob(url, cb) {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url, true);
  xhr.responseType = "blob";
  xhr.onload = function() {
    if (xhr.status === 200) {
      console.log(url);
      cb(xhr.response);
    }
  };
  xhr.send();
}

function saveAs(blob, filename) {
  if (window.navigator.msSaveOrOpenBlob) {
    navigator.msSaveBlob(blob, filename);
  } else {
    var link = document.createElement("a");
    var body = document.querySelector("body");

    link.href = window.URL.createObjectURL(blob);
    link.download = filename;

    // fix Firefox
    link.style.display = "none";
    body.appendChild(link);

    link.click();
    body.removeChild(link);

    window.URL.revokeObjectURL(link.href);
  }
}
function download(url, filename) {
  getBlob(url, function(blob) {
    saveAs(blob, filename);
  });
}

export default {
    download,
    getBlob,
    saveAs
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值