jQuery多文件下载

业务场景是一条数据对应多个文件,需要一次性全部下载,不考虑在服务端把多个文件打包下载,想通过js点击事件向服务端发送多个请求进行下载。在网上找了一篇文章http://www.2cto.com/kf/201501/367538.html,参照它的内容开始写代码。

(function ($) {
  var methods = {
    _download: function () {

      this.each(function (index, item) {
        methods._createLink(item);
      });

  },
  //download属性设置
  _createLink: function (url, triggerDelay, removeDelay) {
  var content = document.getElementById("content");

  var aLink = document.createElement("a");
  content.appendChild(aLink);
  aLink.download = "";

  aLink.onclick = function () {
    window.open(url);

  } 

  if (document.createEventObject) {
    // IE浏览器支持fireEvent方法
    var evt = document.createEventObject();
    if (aLink.fireEvent) {
      aLink.fireEvent("onclick");
    }
  }
  else {
    // 其他标准浏览器使用dispatchEvent方法
    var evt = document.createEvent(‘HTMLEvents‘);
    evt.initEvent("click", true, true);
    aLink.dispatchEvent(evt);
  }

 }
};

  $.fn.multiDownload = function () {
    methods._download.apply(this, arguments);
  };

})(jQuery);

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="Scripts/download.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("#download").click(function () {
var downloadUrl = [‘download.aspx?id=1‘, ‘download.aspx?id=2‘];
$(downloadUrl).multiDownload();

});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<a id=‘download‘ href="#">下载</a>
<div id="content"></div>
</form>
</body>
</html>

download.aspx代码:

protected void Page_Load(object sender, EventArgs e)
{
string str = string.Empty;
if (!string.IsNullOrEmpty(Request["id"]))
{
if (Request["id"] == "1") str = "one";
if (Request["id"] == "2") str = "two";
}

byte[] bytes = System.Text.Encoding.Default.GetBytes(str);

Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(str + ".txt", System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}

到此两个文件可以同时下载了。

在整个过程中碰到的问题:

1.各浏览器兼容的事件驱动器函数

IE9+,标准浏览器:dispatchEvent;IE8-:fireEvent;

2.动态创建元素元素语法报错

一个动态创建的元素对应一个下载文件,事先不知道需要下载多少个文件,所以需要使用动态创建元素。

通过var link= document.createElement("a")创建的元素,在IE8中调用link元素的事件驱动函数时,报未知名的错误,如:link.fireEvent("onclick");

在IE9+中调用link元素的事件驱动函数时,语法正常,但是没有触发事件,如:link.dispatchEvent("click");

标准浏览器中正常;

解决方案:在表单中通过html标签创建一个div元素,将动态创建的元素添加到div元素中,上面的问题就解决了,但是没有找原理,欢迎指点。

3.下载文件方式

超链接.href=下载文件url;

标准浏览器正常,IE9+只能下载最后一个文件,IE8-没有反应;

window.location.href=下载文件url;

各种浏览器都只能下载最后一个文件,经验证,它是等函数中所有代码都执行完成在执行跳转,所以最后一次的url会把前面的url覆盖;

window.open(下载文件url)

各种浏览器终于都能正常下载,因为我这边在被下载页面中显示声明输出的下载文件,如:Response.AddHeader("Content-Disposition","attachment..."); 但是如果直接下载图片或者txt文件,会直接在浏览器中显示出来,待解决。

时间: 2024-08-01 10:42:41

jQuery多文件下载的相关文章

PHP+Mysql+jQuery实现文件下载次数统计

数据表 CREATE TABLE IF NOT EXISTS `downloads` (   `id` int(6) unsigned NOT NULL AUTO_INCREMENT,   `filename` varchar(50) NOT NULL,   `savename` varchar(50) NOT NULL,   `downloads` int(10) unsigned NOT NULL DEFAULT '1',   PRIMARY KEY (`id`),   UNIQUE KEY

jQuery基础课程

环境搭建 搭建一个jQuery的开发环境非常方便,可以通过下列几个步骤进行. 下载jQuery文件库 在jQuery的官方网站(http://jquery.com)中,下载最新版本的jQuery文件库.在网站中找到最新版本文件的下载按钮,将jQuery框架文件下载到本地即可,本教案使用的版本为稳定版:1.9.0版. 引入jQuery文件库 下载完jQuery框架文件后,并不需要任何的安装,仅需要使 用<script>文件导入标记,将jQuery框架文件导入页面中即可,假设该文件下载后保存在项目

JQuery————基础&amp;&amp;基础选择器

环境搭建 搭建一个jQuery的开发环境非常方便,可以通过下列几个步骤进行. 下载jQuery文件库 在jQuery的官方网站(http://jquery.com)中,下载最新版本的jQuery文件库.在网站中找到最新版本文件的下载按钮,将jQuery框架文件下载到本地即可,本教案使用的版本为稳定版:1.9.0版. 引入jQuery文件库 下载完jQuery框架文件后,并不需要任何的安装,仅需要使用<script>文件导入标记,将jQuery框架文件导入页面中即可,假设该文件下载后保存在项目文

emberjs

emberjs 博客:http://www.cnblogs.com/xiangbing/p/emberjs-test.html 案例:http://www.lovewebgames.com/emberjs/test/index.html 源码:https://github.com/tianxiangbing/emberjs-test 准备工作 首页我们要做的是从网上下载下来emberjs相关的文件,目前在1.x的版本中,ember是要依赖jquery(v1.7.1~2.2.0) 和handleb

Oct 28th

jQuery 1.下载jQuery文件库 在jQuery的官方网站(http://jquery.com)中,下载最新版本的jQuery文件库.在网站中找到最新版本文件的下载按钮,将jQuery框架文件下载到本地即可,本教案使用的版本为稳定版:1.9.0版. 2.引入jQuery文件库 下载完jQuery框架文件后,并不需要任何的安装,仅需要使用<script>文件导入标记,将jQuery框架文件导入页面中即可,假设该文件下载后保存在项目文件夹Jscript中,那么,在页面的<head&g

emberjs学习一(环境和第一个例子)

code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent; } code, pre tt { background-color: transparent; border: none; } --> emberjs学习一(环境和第一个例子) 博客:http://www.cnblogs.com/xiangbing/p/emberjs-test.html 案例:http://www.love

PHP服务器文件管理器开发小结(九):jQuery动态表单实现文件下载

前文讨论的文件操作,无论是新建.编辑.移动.删除,都是服务端对本地文件系统的操作.这一节需要讨论一个涉及服务端和客户端协调进行的操作:文件下载. 简单的文件下载可以通过将相对路径写入超链接的方式进行,然而这样仅限于服务端Apache有下载权限的文档,如果需要支持对更多文件进行下载,仅仅使用这一方式就远远不够了.这里需要利用PHP的能力,在服务端"取出"文件并"推送"给客户端. 首先是生成下载图标链接: if (is_readable($filePath)) $inf

基于jquery 的ajax 文件下载

ajax 文件下载,实际上就是模拟表单提交,代码如下: function download(url, data, method){ //url and data options required if( url && data ){ //data can be string of parameters or array/object data =typeof data =='string'? data : jQuery.param(data); //split params into fo

Jquery+asp.net实现Ajax方式文件下载实例代码

如果文件中,需要下载一个文件,一般用超级链接的方式即可. 但是如果是图片,浏览器会默认打开图片浏览,不是实现下载. 考虑可以使用jquery ajax提交form请求的方式. jquery download函数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17  // Ajax 文件下载     jQuery.download = function (url, data, method) {         // 获取url和data         if (