JS通过URL下载文件并重命名两种方式代码

 更新时间:2023年11月01日 12:01:25   作者:訾博ZiBo  
前端下载文件方法很多,url是文件地址,下面这篇文章主要给大家介绍了关于JS通过URL下载文件并重命名的两种方式,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、a 标签简单设置 href 方式

// 下载文件
function downloadFile() {
  const link = document.createElement('a');
  link.style.display = 'none';
  // 设置下载地址
  link.setAttribute('href', file.sourceUrl);
  // 设置文件名
  link.setAttribute('download', file.fileName);
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}

二、a 标签使用 blob 数据类型方式

async function download(downloadUrl: string, downloadFileName: string ) {
  const blob = await getBlob(downloadUrl);
  saveAs(blob, downloadFileName );
}

function getBlob(url: string) {
  return new Promise<Blob>((resolve, reject) => {
    const xhr = new XMLHttpRequest();

    xhr.open('GET', url, true);
    xhr.responseType = 'blob';
    xhr.onload = () => {
      if (xhr.status === 200) {
        resolve(xhr.response);
      } else {
        reject(new Error(`Request failed with status ${xhr.status}`));
      }
    };
    xhr.onerror = () => {
      reject(new Error('Request failed'));
    };

    xhr.send();
  });
}

function saveAs(blob: Blob, filename: string) {
  const link = document.createElement('a');
  const body = document.body;

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

  // hide the link
  link.style.display = 'none';
  body.appendChild(link);

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

  window.URL.revokeObjectURL(link.href);
}

附:通过blob实现跨域下载并修改文件名

点击时调用如下方法

function  load(file) {
  this.getBlob(file.url).then(blob => {
    this.saveAs(blob, file.name);
  });
},

//通过文件下载url拿到对应的blob对象

getBlob(url) {
  return new Promise(resolve => {
    const xhr = new XMLHttpRequest();

    xhr.open('GET', url, true);
    xhr.responseType = 'blob';
    xhr.onload = () => {
      if (xhr.status === 200) {
        resolve(xhr.response);
      }
    };

    xhr.send();
  });
},
//下载文件
saveAs(blob, filename) {
  var link = document.createElement('a');
  link.href = window.URL.createObjectURL(blob);
  link.download = filename;
  link.click();
}

总结 

到此这篇关于JS通过URL下载文件并重命名两种方式的文章就介绍到这了,更多相关JS URL下载文件并重命名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)

    阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)

    阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)...
    2007-05-05
  • javascript原生ajax写法分享

    javascript原生ajax写法分享

    本文通过2个示例来给大家分享了下原生javascript结合ajax实现数据请求的方法以及原理,非常的简单实用,有需要的小伙伴可以参考下
    2016-04-04
  • js实现全国省份城市级联下拉菜单效果代码

    js实现全国省份城市级联下拉菜单效果代码

    这篇文章主要介绍了js实现全国省份城市级联下拉菜单效果代码,通过JavaScript针对数组的定义与元素的遍历实现省市级联菜单功能,非常具有实用价值,需要的朋友可以参考下
    2015-09-09
  • js快速排序的实现代码

    js快速排序的实现代码

    快速排序是一种平均性能非常优秀的排序算法,在很多场合都会应用到他,了解快速排序于对开放高效率的软件有很重要的作用
    2013-12-12
  • 浅谈js对象的创建和对6种继承模式的理解和遐想

    浅谈js对象的创建和对6种继承模式的理解和遐想

    下面小编就为大家带来一篇浅谈js对象的创建和对6种继承模式的理解和遐想。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Javascript中构造函数要注意的一些坑

    Javascript中构造函数要注意的一些坑

    JavaScript语言是一门面向对象的语言,但JS中并没有类的概念的。于是JavaScript采用构造函数的方式来模拟类的效果,即我们通过函数来创建对象。这也证明了函数在JavaScript中具有非常重要的地位。本文主要介绍了Javascript中构造函数的一些坑,需要的朋友可以参考。
    2017-01-01
  • JavaScript设计模式之单例模式详解

    JavaScript设计模式之单例模式详解

    这篇文章主要为大家详细介绍了JavaScript设计模式之例模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • JavaScript判断浏览器类型的方法

    JavaScript判断浏览器类型的方法

    这篇文章主要介绍了JavaScript判断浏览器类型的方法,可实现针对IE、火狐、谷歌等浏览器的判断,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • JS使用eval解析JSON的注意事项分析

    JS使用eval解析JSON的注意事项分析

    这篇文章主要介绍了JS使用eval解析JSON的注意事项,结合实例形式具体分析了JS解析JSON的技巧与使用evel时的注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • JavaScript对象拷贝与赋值操作实例分析

    JavaScript对象拷贝与赋值操作实例分析

    这篇文章主要介绍了JavaScript对象拷贝与赋值操作,结合实例形式分析了javascript对象定义、拷贝、赋值等相关操作技巧与注意事项,需要的朋友可以参考下
    2018-12-12

最新评论