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设置图片等比例缩小的方法
Apr 29 jQuery
解决jQuery ajax动态新增节点无法触发点击事件的问题
May 24 jQuery
jQuery实现动态删除LI的方法
May 30 jQuery
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
使用jQuery实现购物车结算功能
Aug 15 jQuery
详解jquery插件jquery.viewport.js学习使用方法
Sep 08 jQuery
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 jQuery
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
Oct 10 jQuery
详解如何使用webpack打包多页jquery项目
Feb 01 jQuery
jquery实现动态改变css样式的方法分析
May 27 jQuery
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 jQuery
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
Oct 10 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木马webshell扫描器代码
2012/01/25 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
prototype 学习笔记整理
2009/07/17 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
为javascript添加String.Format方法
2020/08/11 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
linux安装python修改默认python版本方法
2019/03/31 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
python 实现多维数组(array)排序
2020/02/28 Python
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
Solaris操作系统的线程机制
2015/07/28 面试题
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
金融专业推荐信
2013/11/14 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
合伙经营协议书
2014/04/18 职场文书
2016高考感言
2015/08/01 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技