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去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
jQuery自定义多选下拉框效果
Jun 19 jQuery
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
jquery学习笔记之无new构建详解
Dec 07 jQuery
jQuery插件jsonview展示json数据
May 26 jQuery
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
jQuery-ui插件sortable实现自由拖动排序
Dec 01 jQuery
jQuery中使用validate插件校验表单功能
May 24 jQuery
jQuery 选择器用法基础入门示例
Jan 04 jQuery
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
Mar 20 jQuery
深入分析jQuery.one() 函数
Jun 03 jQuery
jQuery实现影院选座订座效果
Apr 13 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
第三节 定义一个类 [3]
2006/10/09 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
python 简单的绘图工具turtle使用详解
2017/06/21 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
详解python的四种内置数据结构
2019/03/19 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
Python代码太长换行的实现
2019/07/05 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
Python绘制动态水球图过程详解
2020/06/03 Python
python中return不返回值的问题解析
2020/07/22 Python
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
学生安全教育材料
2014/02/14 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
社区综治工作汇报
2014/10/27 职场文书
实习单位证明范例
2014/11/17 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
信息技术研修心得体会
2016/01/08 职场文书
远程教育培训心得体会
2016/01/09 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
Win11查看设备管理器
2022/04/19 数码科技