JQuery 实现文件下载的常用方法分析


Posted in jQuery onOctober 29, 2019

本文实例讲述了JQuery 实现文件下载的常用方法。分享给大家供大家参考,具体如下:

GET方式

window.location.href = url;

POST方式

var url = "下载接口地址";
// 构造隐藏的form表单
var $form = $("<form id='download' class='hidden' method='post'></form>");
$form.attr("url",url);
$(body).append($form);
// 添加提交参数
var $input1 = $("<input name='param1' type='text'></input>");
$input1.attr("value","参数值1");
$("#download").append($input1);
var $input2 = $("<input name='param2' type='text'></input>");
$input1.attr("value","参数值2");
$("#download").append($input2);
// 提交表单
$form.submit();

ajax为什么不能下载文件

JQuery 实现文件下载的常用方法分析

ajax支持的服务器返回数据类型有:xml、json、script、html,其他类型(例如二进制流)将被作为String返回,无法触发浏览器的下载处理机制和程序。

// ajax将返回数据转换为string,再利用该string创建Blob对象,下载的文件无法正确打开,数据可能已经被破坏
var blob = new Blob([data]);
//对于Blob对象,我们可以创建出一个URL来访问它。使用URL对象的createObjectURL方法。
var a = document.createElement('a');
a.download = 'data.doc';
a.href=window.URL.createObjectURL(blob);
a.click()

HTML5 Blob对象

一直以来,JS都没有比较好的可以直接处理二进制的方法。而Blob的存在,允许我们可以通过JS直接操作二进制数据。Blob对象可以看做是存放二进制数据的容器。

创建Blob对象

var blob = new Blob(dataArr:Array<any>, opt:{type:string,endings:string});
  • dataArr:数组,包含了要添加到Blob对象中的数据。数据可以是任意多个ArrayBuffer,ArrayBufferView, Blob,或者 DOMString对象。
  • opt:对象,包含两个属性
    • type:用于设置Blob对象的属性(如:MIME类型)
    • endings :(已废弃),设置BlobBuilder.append() 方法的endings参数,取值"transparent"或"native"
// 例如创建一个装填DOMString对象的Blob对象
var data='<b style="font-size:32px;color:red;">Blob</b>';  
var blob=new Blob([data],{"type":"text/html"});  
console.log(blob);

xmlhttprequest 2 + Blob 实现文件下载

xmlhttprequest 2 标准支持流文件,使用 xhr.response作为返回(不是responseText)

var url = "";
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);//get请求,请求地址,是否异步
xhr.responseType = "blob";  // 返回类型blob
xhr.onload = function () {// 请求完成处理函数
 if (this.status === 200) {
 var blob = this.response;// 获取返回值
 var a = document.createElement('a');
 a.download = 'data.doc';
 a.href=window.URL.createObjectURL(blob);
 a.click();
  }
};
// 发送ajax请求
xhr.send();

希望本文所述对大家jQuery程序设计有所帮助。

jQuery 相关文章推荐
Jquery-data的三种用法
Apr 18 jQuery
jquery获取链接地址和跳转详解(推荐)
Aug 15 jQuery
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
jQuery实现遍历XML节点和属性的方法示例
Apr 29 jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
Feb 27 jQuery
如何使用CSS3+JQuery实现悬浮墙式菜单
Jun 18 jQuery
jQuery实现的记住帐号密码功能完整示例
Aug 03 jQuery
jQuery实现视频展示效果
May 30 jQuery
jQuery实现简单QQ聊天框
Aug 27 jQuery
jQuery实现简单三级联动效果
Sep 05 jQuery
jquery自定义组件实例详解
Dec 31 jQuery
jQuery实现全选按钮
Jan 01 jQuery
jquery validate 实现动态增加/删除验证规则操作示例
Oct 28 #jQuery
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
Oct 26 #jQuery
jquery实现购物车基本功能
Oct 25 #jQuery
使用jQuery实现掷骰子游戏
Oct 24 #jQuery
jquery实现掷骰子小游戏
Oct 24 #jQuery
jquery 键盘事件 keypress() keydown() keyup()用法总结
Oct 23 #jQuery
jQuery实现轮播图源码
Oct 23 #jQuery
You might like
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
详解python中的json的基本使用方法
2016/12/21 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
Python异常处理操作实例详解
2018/08/28 Python
在python里面运用多继承方法详解
2019/07/01 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
python 如何停止一个死循环的线程
2020/11/24 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
歌唱比赛获奖感言
2014/01/21 职场文书
生日宴会主持词
2014/03/20 职场文书
八年级作文之友谊
2019/12/02 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
Oracle 触发器trigger使用案例
2022/02/24 Oracle