使用Jquery Ajax请求 下载压缩文件

Posted 查克拉的觉醒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Jquery Ajax请求 下载压缩文件相关的知识,希望对你有一定的参考价值。

使用第三方组件:  ICSharpCode.SharpZipLib

 给按钮绑定一个点击事件

后台处理:

 1 public ActionResult DownZip(string ids)
 2         {
 3             if (string.IsNullOrEmpty(ids))
 4                 return Content("请选择要操作的数据");
 5 
 6             var idArr = ids.Split(Constant.SEPARATOR.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
 7 
 8             #region
 9             FileStream fs = null;
10             byte[] buffer = null;
11             string path = Server.MapPath("/Upload/Resource/压缩包.zip");
12             
13             using (ZipFile file = ZipFile.Create(path))
14             {
15                 file.BeginUpdate();
16 
17                 //通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。
18                 file.NameTransform = new MyNameTransfom();                
19 
20                 foreach (var id in idArr)
21                 {
22                     var model = new BLL.APPResourceBLL().GetModel(Convert.ToInt32(id));
23                     file.Add(Server.MapPath(model.Path));
24                 }                
25 
26                 file.CommitUpdate();               
27             }
28             fs = new FileStream(path, FileMode.Open);
29             buffer = new byte[fs.Length];
30             fs.Position = 0;
31             fs.Read(buffer, 0, buffer.Length);
32             fs.Close();
33             Response.Charset = "UTF-8";
34             Response.Buffer = false;
35             Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
36             Response.ContentType = "application/octet-stream";
37             Response.AddHeader("Content-Disposition", "attachment; filename=压缩包.zip");
38             Response.BinaryWrite(buffer);
39             Response.Flush();
40             Response.End();
41             return new EmptyResult();
42             #endregion            
43         }

前台:

 1 function downZipEvent() {
 2         if ($(".checkall:checked").size() < 1) {
 3             $.dialog.alert(\'请选择下载文件!\');
 4             return false;
 5         }
 6         var ids = \'\';
 7         $.each($(".checkall:checked"), function () {
 8             ids += $(this).attr(\'typeid\') + \',\';
 9         })
10 
11         var form = $("<form>");
12         form.attr("style", "display:none");
13         form.attr("target", "");
14         form.attr("method", "post");
15         form.attr("action", "/AppManage/AppResource/DownZip");
16         var input1 = $("<input>");
17         input1.attr("type", "hidden");
18         input1.attr("name", "ids");
19         input1.attr("value", ids);
20         $("body").append(form);
21         form.append(input1);
22         form.submit();
23         form.remove();
24     }

 

参考: http://blog.csdn.net/kongwei521/article/details/51167903

      http://www.jb51.net/article/74867.htm

      http://www.cnblogs.com/kissdodog/p/3525295.html

 

总结:当以提交表单形式发送后台,可以直接调取浏览器下载;

异步的方式则无法直接调用, 可以返回状态,以表单形式在异步请求一次.

 1 $.get(\'/CheckBill/CompareBill\', { billDate: billDate, type: type }, function (data) {
 2   var temp = data.split(\':\');
 3     if (temp[0] == "ok") {
 4       $(\'#total\').text(temp[1]);
 5       $.dialog.alert(\'对账成功\');
 6     } else if (temp[0] == "ex") {
 7         $.dialog.alert(temp[1]);
 8         subDown(billDate);
 9     }
10     else {
11       $.dialog.alert(data);
12     }
13})

 

ajax异步加载:

https://www.cnblogs.com/wt627939556/p/6287242.html

http://www.jb51.net/article/46535.htm

https://www.cnblogs.com/fastmover/p/4791408.html

以上是关于使用Jquery Ajax请求 下载压缩文件的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript文件上传和下载

ajax可以下载文件吗

JQuery

如何启动使用jQuery自动下载zip文件的PHP脚本

Ajax异步请求返回文件流(eg:导出文件时,直接将导出数据用文件流的形式返回客户端供客户下载)

使用 jQuery 的 AJAX 请求回调