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 相关文章推荐
Mootools 1.2教程 定时器和哈希简介
Sep 15 Javascript
js 异步处理进度条
Apr 01 Javascript
javascript实现支持移动设备画廊
Aug 24 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
Mar 08 Javascript
jquery将标签元素的高设为屏幕的百分比
Apr 19 jQuery
vue组件父与子通信详解(一)
Nov 07 Javascript
微信小程序中实现手指缩放图片的示例代码
Mar 13 Javascript
详解Vue中watch的详细用法
Nov 28 Javascript
微信浏览器左上角返回按钮监听的实现
Mar 04 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
Sep 01 Javascript
vue使用canvas实现移动端手写签名
Sep 22 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 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
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
php模板函数 正则实现代码
2012/10/15 PHP
PHP Directory 函数的详解
2013/03/07 PHP
PHP中Header使用的HTTP协议及常用方法小结
2014/11/04 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
Python科学计算之Pandas详解
2017/01/15 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
python如何设置静态变量
2020/09/07 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
什么是测试驱动开发(TDD)
2012/02/15 面试题
致全体运动员广播稿
2014/02/01 职场文书
物流创业计划书
2014/02/01 职场文书
财务总监岗位职责
2014/03/07 职场文书
房屋租赁协议书
2014/04/10 职场文书
防灾减灾标语
2014/10/07 职场文书
开业典礼致辞
2015/07/29 职场文书
Feign调用传输文件异常的解决
2021/06/24 Java/Android
一文搞懂Java中的注解和反射
2022/06/21 Java/Android