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 相关文章推荐
php上传图片并给图片打上透明水印的代码
Jun 07 Javascript
基于Jquery的标签智能验证实现代码
Dec 27 Javascript
Javascript连接多个数组不用concat来解决
Mar 24 Javascript
jquery实现多条件筛选特效代码分享
Aug 28 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
Sep 11 Javascript
vue-router 权限控制的示例代码
Sep 21 Javascript
静态页面实现 include 引入公用代码的示例
Sep 25 Javascript
mongoose更新对象的两种方法示例比较
Dec 19 Javascript
扫微信小程序码实现网站登陆实现解析
Aug 20 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
Jan 05 Javascript
vue实现倒计时功能
Mar 24 Vue.js
关于vue中如何监听数组变化
Apr 28 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
经销商会议欢迎词
2014/01/11 职场文书
加入学生会演讲稿
2014/04/24 职场文书
商业项目策划方案
2014/06/05 职场文书
商铺消防安全责任书
2014/07/29 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL
python+opencv实现目标跟踪过程
2022/06/21 Python