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 进入页面默认给已赋值的复选框打钩
Mar 23 jQuery
jQuery插件开发发送短信倒计时功能代码
May 09 jQuery
jQuery实现可编辑表格并生成json结果(实例代码)
Jul 19 jQuery
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
jQuery取得元素标签名称小结(附代码)
Aug 16 jQuery
jQuery实现的简单获取索引功能示例
Jun 04 jQuery
jQuery实现图片下载代码
Jul 18 jQuery
jquery ui 实现 tab标签功能示例【测试可用】
Jul 25 jQuery
jQuery-Citys省市区三级菜单联动插件使用详解
Jul 26 jQuery
JQuery省市联动效果实现过程详解
May 08 jQuery
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
jQuery实现飞机大战小游戏
Jul 05 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计划任务、定时执行任务的实现代码
2011/04/23 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
Python实现查找系统盘中需要找的字符
2015/07/14 Python
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
Java编程迭代地删除文件夹及其下的所有文件实例
2018/02/10 Python
python psutil库安装教程
2018/03/19 Python
python自动化报告的输出用例详解
2018/05/30 Python
Python Requests库基本用法示例
2018/08/20 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
写自荐信要注意什么
2013/12/26 职场文书
cf收人广告词
2014/03/14 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
毕业大学生自荐信
2014/06/17 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
新生开学寄语大全
2015/05/28 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers
python使用shell脚本创建kafka连接器
2022/04/29 Python