客户端实现多文件下载

参考文章:http://www.dedecms.com/knowledge/program/asp-donet/2013/0609/30056.html

接下来是自己实现的方法

 我用的是ajax与ashx

首先我先用ajax查询到所有的附件文档的名字

代码如下:

//下载文件
function download()
{
  //  alert(row.DOCID);
    var DOCID = SELECTDOCID.DOCID;
    var url = "../AjaxToWcf/AjaxToWcf.ashx";
    var serverParam = {
        docId: DOCID
    };
    var ajaxParams = {
        serverUrl: "BS_DocumentManage/DownLoadFile",
        serverParam: parent.JSON.stringify(serverParam),
        requestType: "POST",
        IsAsync: true,
        language: parent.SYS_LANGUAGE.SYS_LANGUAGE
    };
    var names = [];
    parent.CommonAjaxRequest(url, ajaxParams, function (_data) {
        Loaded();
        var jsonData = parent.JSON.parse(_data);
        //datagrid加载
        // $('#docList_Table').datagrid('loadData', jsonData);
        names = jsonData.url;
        if (names.length <= 0)
        {
            $.messager.alert('提示', '该文档没有附件', 'info');
        }
        var str = names.join(',');
        window.location.href = "../DocumentManagement/DownFile.ashx?fileName=" + str;
    });
}

接下来在后台的处理是

public void ProcessRequest(HttpContext context)
        {
            
                string fileNames = context.Request["fileName"];
                string[] files = fileNames.Split(',');
                string time = DateTime.Now.Ticks.ToString();
                string filepath = context.Server.MapPath("~/Upload/Docs/" + time + ".zip");
                ZipFileMain(files, filepath, 9, context);
                try
                {
                    if (File.Exists(filepath))
                    {
                        DownloadFile(context.Server.UrlEncode("附件.zip"), filepath,context);
                    }
                }
                catch (Exception ex)
                {
                    context.Response.Write(ex);
                }
                finally
                { 
                
                }
         }



        /// <summary>
        /// 压缩文件
        /// </summary>
        /// <param name="fileName">要压缩的所有文件(完全路径)</param>
        /// <param name="name">压缩后文件路径</param>
        /// <param name="Level">压缩级别</param>
        public void ZipFileMain(string[] filenames, string name, int level,HttpContext context)
        {
            ZipOutputStream s = new ZipOutputStream(File.Create(name));//创建压缩文件
            Crc32 crc = new Crc32();
            //压缩级别
            s.SetLevel(level);//0-store only to 9-measns  best compression
            string filepathName = "";
            try
            {
                foreach (var file in filenames)
                {
                    //打开压缩文件
                    filepathName = context.Server.MapPath("~/Upload/Docs/") + file;
                    FileStream fs = File.OpenRead(filepathName);//文件地址
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    //建立压缩实体
                    ZipEntry entry = new ZipEntry(file);
                    entry.DateTime = DateTime.Now;
                    entry.Size = fs.Length;
                    fs.Close();
                    crc.Reset();
                    crc.Update(buffer);
                    entry.Crc = crc.Value;
                    s.PutNextEntry(entry);
                    s.Write(buffer, 0, buffer.Length);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                s.Finish();
                s.Close();
            }

        }

        /// <summary>
        /// 压缩文件
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="filePath"></param>
        /// <param name="context"></param>
        private void DownloadFile(string fileName, string filePath,HttpContext context)
        {
            FileInfo fileInfo = new FileInfo(filePath);
            context.Response.Clear();
            context.Response.ClearContent();
            context.Response.ClearHeaders();
            context.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
            context.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            context.Response.AddHeader("Content-Transfer-Encoding", "binary");
            context.Response.ContentType = "application/octet-stream";
            context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            context.Response.WriteFile(fileInfo.FullName);
            context.Response.Flush();
            //删除文件
            try
            {
                File.Delete(filePath);
            }
            catch (Exception ex2)
            {
                context.Response.Write(ex2);
            }
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
同时因为文档是中文名称在压缩过程中会出现乱码,所有上网搜了,借助于网上的

http://download.csdn.net/detail/maoj0109/4569335

作者为maoj0109的编译好的插件


多亏借鉴二位作者的文章,我的功能基本实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值