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 相关文章推荐
jquery blockUI 遮罩不能消失与不能提交的解决方法
Sep 17 Javascript
分析了一下JQuery中的extend方法实现原理
Feb 27 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
Oct 24 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
Dec 31 Javascript
Jquery获取第一个子元素简单实例
Jun 02 Javascript
JS实现动态增加和删除li标签行的实例代码
Oct 16 Javascript
详解Angular2 之 结构型指令
Jun 21 Javascript
jQuery实现右侧抽屉式在线客服功能
Dec 25 jQuery
Express的HTTP重定向到HTTPS的方法
Jun 06 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
Jun 14 Javascript
vue中实现图片压缩 file文件的方法
May 28 Javascript
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
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
默默简单的写了一个模板引擎
2007/01/02 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
在漏洞利用Python代码真的很爽
2007/08/26 Python
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
Python 一句话生成字母表的方法
2019/01/02 Python
python中什么是面向对象
2020/06/11 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
数组越界问题
2015/10/21 面试题
优秀导游先进事迹材料
2014/01/25 职场文书
单位承诺书格式
2014/05/21 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
优质护理心得体会
2016/01/22 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
使用pytorch实现线性回归
2021/04/11 Python