.NET实现电子文件的单个下载及批量下载

今天遇到电子文件单个下载及批量下载的问题,以下是总结出来的部分代码。

单个电子文件下载:

      /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="page">当前页对象</param>
        /// <param name="fileName">文件名</param>
        /// <param name="fileContext">文件字节流</param>
        public static void DownLoadFile(System.Web.UI.Page page, string fileName, byte[] fileContext)
        {
            page.Response.Buffer = true;
            page.Response.Clear();
            page.Response.ContentType = "application/octet-stream";
            page.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
            page.Response.BinaryWrite(fileContext);
            page.Response.Flush();
            page.Response.End();
        }

使用using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.GZip;

打包下载:

#region 批量下载选中的电子文件
        /// <summary>
        /// 批量下载
        /// </summary>
        /// <param name="selectedID">所选ID集合</param>
        private bool BatchDownLoad(string fid)
        {
            bool result = true;
            GDAS.Model.Sys_User curUser = GDAS.BLL.Sys_User.GetCurUser();
            string NewFilename = "[" + curUser.No + "] " + curUser.Name + ".zip";
            string strTempPath = getFuPath();

            if (!System.IO.Directory.Exists(strTempPath))
            {
                System.IO.Directory.CreateDirectory(strTempPath);
            }
            string strFullPath = Path.Combine(strTempPath, NewFilename);
            //先删除文件 再生成
            if (System.IO.File.Exists(strFullPath))
            {
                System.IO.File.Delete(strFullPath);
            }

            GDAS.BLL.Doc_Attachment bAttachment = new GDAS.BLL.Doc_Attachment();
            result = bAttachment.ZipFileList(fid, strFullPath);
            if (result)
            {
                string strFileDownloadName = "附件打包下载.zip";
                Response.ContentType = "application/x-zip-compressed";
                Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(strFileDownloadName, System.Text.Encoding.UTF8));
                Response.TransmitFile(strFullPath);
            }
            else
            {
                Kit.Ajax_Alert(this, "附件打包出错,请与管理员联系!");
            }

            return result;
        }

        //获取下载打包临时文件路径
        private string getFuPath()
        {
            return Server.MapPath(Config.DownloadPath);
        }
        #endregion

 

 /// <summary>
        /// 批量下载附件
        /// </summary>
        /// <param name="list">批量下载的附件ID集合</param>
        /// <param name="ZipedFile">压缩后的文件路径全称</param>
        /// <param name="downloaderNo">下载用户的员工号</param>
        /// <param name="downloaderName">下载用户的姓名</param>
        public bool ZipFileList(string strID, string strFullpath)
        {
            try
            {
                System.IO.FileStream ZipFile = System.IO.File.Create(strFullpath);
                ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);

                string sql = "select FileName,FileContext from db_owner.Doc_Attachment where ID in (" + strID + ")";
                DataTable dt = DBUtility.DbHelperSQL.Query(sql).Tables[0];
                if (dt.Rows.Count != 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        byte[] FileContext = dr["FileContext"] as byte[];
                        string strFileName = dr["FileName"].ToString();
                        ZipEntry ZipEntry = new ZipEntry(strFileName);
                        ZipStream.PutNextEntry(ZipEntry);
                        ZipStream.SetLevel(6);
                        ZipStream.Write(FileContext, 0, FileContext.Length);
                    }
                }
                ZipStream.Finish();
                ZipStream.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }

        }

 

posted @ 2013-04-17 15:35  AndyDu  阅读(286)  评论(0编辑  收藏  举报