JavaScript实现文件下载并重命名代码实例


Posted in Javascript onDecember 12, 2019

这篇文章主要介绍了JavaScript实现文件下载并重命名代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

第一种是HTML官网中的方法

<a href="/images/liang.jpg" rel="external nofollow" download="文件名称">

HTML5 中 a 标签提供了一个 filename 属性,可以下载成指定的 download 属性名称

这种同源访问是没有问题的,但一跨域就不行了,试了其它方法,不是报跨域错误,就是在当前页面打开文件,体验相当不好。

第二种方案比较通用

/**
 * 获取 blob
 * url 目标文件地址
 */
function 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();
  });
}

/**
 * 保存 blob   
 * filename 想要保存的文件名称
 */
function saveAs(blob, filename) {
  if (window.navigator.msSaveOrOpenBlob) {
    navigator.msSaveBlob(blob, filename);
  } else {
    const link = document.createElement('a');
    const 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);
  }
}

/**
 * 下载
 * @param {String} url 目标文件地址
 * @param {String} filename 想要保存的文件名称
 */
function download(url, filename) {
  getBlob(url).then(blob => {
    saveAs(blob, filename);
  });
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS跨域总结
Aug 30 Javascript
JS实现往下不断流动网页背景的方法
Feb 27 Javascript
详解maxlength属性在textarea里奇怪的表现
Dec 27 Javascript
jQuery实现图片走马灯效果的原理分析
Jan 16 Javascript
浅谈键盘上回车按钮的js触发事件
Feb 13 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
JS实现针对给定时间的倒计时功能示例
Apr 11 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
May 30 Javascript
微信小程序实现图片懒加载的示例代码
Dec 13 Javascript
vue引用js文件的多种方式(推荐)
May 17 Javascript
JS将网址url转化为JSON格式的方法
Jul 02 Javascript
layui radio性别单选框赋值方法
Aug 15 Javascript
vue实现鼠标移过出现下拉二级菜单功能
Dec 12 #Javascript
微信小程序背景音乐开发详解
Dec 12 #Javascript
vue实现商城秒杀倒计时功能
Dec 12 #Javascript
深入理解 TypeScript Reflect Metadata
Dec 12 #Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
Dec 12 #Javascript
vue-property-decorator用法详解
Dec 12 #Javascript
JS实现动态倒计时功能(天数、时、分、秒)
Dec 12 #Javascript
You might like
用PHP制作静态网站的模板框架(二)
2006/10/09 PHP
简单谈谈favicon
2015/06/10 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
JS烟花背景效果实现方法
2015/03/03 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
降低python版本的操作方法
2020/09/11 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
5s推行计划书
2014/05/06 职场文书
入党现实表现材料
2014/12/23 职场文书
实验心得体会范文
2016/01/25 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python