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 相关文章推荐
Javascript 各浏览器的 Javascript 效率对比
Jan 23 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
js仿支付宝多方框输入支付密码效果
Sep 27 Javascript
JavaScript用构造函数如何获取变量的类型名
Dec 23 Javascript
详解node服务器中打开html文件的两种方法
Sep 18 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
Sep 30 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
Dec 11 Javascript
js实现弹出框的拖拽效果实例代码详解
Apr 16 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 Javascript
JavaScript实现HSL拾色器
May 21 Javascript
在Vue中获取自定义属性方法:data-id的实例
Sep 09 Javascript
Javascript节流函数throttle和防抖函数debounce
Dec 03 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
PHP的加密方式及原理
2012/06/14 PHP
php 实现进制相互转换
2016/04/07 PHP
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
学习jQuey中的return false
2015/12/18 Javascript
jQuery使用方法
2017/02/04 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
Python设计密码强度校验程序
2020/07/30 Python
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
大学活动总结范文
2014/04/29 职场文书
联片教研活动总结
2014/07/01 职场文书
安全标兵事迹材料
2014/08/17 职场文书
2015年资料员工作总结
2015/04/25 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
初中数学教学随笔
2015/08/15 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript