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实现定时刷新功能代码
May 09 jQuery
jQuery操作之效果详解
May 19 jQuery
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 jQuery
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 jQuery
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 jQuery
关于jquery layui弹出层的使用方法
Apr 21 jQuery
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
jQuery使用each遍历循环的方法
Sep 19 jQuery
jQuery实现高级检索功能
May 28 jQuery
JavaScript或jQuery 获取option value值方法解析
May 12 jQuery
jQuery实现简单评论功能
Aug 19 jQuery
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 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
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
Python实现建立SSH连接的方法
2015/06/03 Python
Python正则表达式教程之一:基础篇
2017/03/02 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
python实现俄罗斯方块小游戏
2020/04/24 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
25岁生日感言
2014/01/13 职场文书
写求职信有什么意义
2014/02/17 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
司法所长先进事迹
2014/06/02 职场文书
治安消防安全责任书
2014/07/23 职场文书
2014年电工工作总结
2014/11/20 职场文书
2014年采购工作总结
2014/11/20 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python