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正则表达式在页面验证url网址输入是否正确
Apr 04 jQuery
jQuery菜单实例(全选,反选,取消)
Aug 28 jQuery
jQuery EasyUI 选项卡面板tabs的使用实例讲解
Dec 25 jQuery
如何用input标签和jquery实现多图片的上传和回显功能
May 16 jQuery
jQuery插件Validation表单验证详解
May 26 jQuery
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
基于jQuery ztree实现表格风格的树状结构
Aug 31 jQuery
jquery实现动态添加附件功能
Oct 23 jQuery
利用jquery和BootStrap实现动态滚动条效果
Dec 03 jQuery
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
Apr 04 jQuery
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
Apr 10 jQuery
jquery操作checkbox的常用方法总结【附测试源码下载】
Jun 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中的类-什么叫类
2006/11/20 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
Python检测网络延迟的代码
2018/05/15 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
python类共享变量操作
2020/09/03 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
劳资专员岗位职责
2013/12/27 职场文书
进步之星获奖感言
2014/02/22 职场文书
英语老师推荐信
2014/02/26 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书