zoukankan      html  css  js  c++  java
  • Asp.net 实现选择文件批量下载

    一、引用ICSharpCode.SharpZipLib.dlls下载地址  http://www.icsharpcode.net/OpenSource/SharpZipLib/

    二、获取含有要打包文件名信息

    格式解释:DirFullPath:目录,在哪个文件夹里选择文件

    SearchPattern:搜索条件:比如*.doc 选择所有doc格式的文件

     fncountent:文件名列表 只单纯的名字 如:ee.txt 只是ee名字s

     public static List<string> GetDirFiles(string DirFullPath, string SearchPattern, List<string> fncountent)

            {

                if (Directory.Exists(DirFullPath) == true)

                {

                    List<string> list = new List<string>();

                    //获取当前目录下指定文件类型的文件列表

                    string[] stringList = Directory.GetFiles(DirFullPath, SearchPattern);

     

                    foreach (string str in stringList)

                    {

                        string fileName;

                        fileName = System.IO.Path.GetFileNameWithoutExtension(str);

                        foreach (var s in fncountent)

                        {

                            if (fileName.Contains(s))

                            {

                                if (list.Where(a => a == fileName).Count() == 0)

                                {

                                    list.Add(fileName);

                                }

                            }

                        }

     

                    }

                    return list;

                }

                else

                {

                    return null;

                }

            }

     三、压缩文件文件方法

      // <summary> 

            /// 压缩指定文件生成ZIP文件 

            /// </summary> 

            /// <param name="topDirName">顶层文件夹名称 \Storage Card\PDADataExchange\send\xml\</param> 

            /// <param name="fileNamesToZip">待压缩文件列表  file名 ddd.txt</param> 

            /// <param name="ZipedFileName">ZIP文件  \Storage Card\PDADataExchange\send\zip\version.zip</param> 

            /// <param name="CompressionLevel">压缩比  7</param> 

            /// <param name="password">密码 ""</param> 

            /// <param name="comment">压缩文件注释文字  ""</param> 

            public static void ZipFile(string topDirName, string[] fileNamesToZip, string ZipedFileName, int CompressionLevel, string password, string comment)

            {

                using (ZipOutputStream s = new ZipOutputStream(System.IO.File.Open(ZipedFileName, FileMode.Create)))

                {

                    if (password != null && password.Length > 0)

                        s.Password = password;

     

                    if (comment != null && comment.Length > 0)

                        s.SetComment(comment);

     

                    s.SetLevel(CompressionLevel); // 0 - means store only to 9 - means best compression 

                    foreach (string file in fileNamesToZip)

                    {

                        using (FileStream fs = File.OpenRead(Path.Combine(topDirName, file)))   //打开待压缩文件 

                        {

                            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();

                            s.PutNextEntry(entry);

                            s.Write(buffer, 0, buffer.Length);

                        }

                    }

                    s.Finish();

                    s.Close();

                }

            }

    四、返回文件方法

       protected void ResponseFile(string filename)

            {

     

                FileInfo file = new FileInfo(filename);//创建一个文件对象

                Response.Clear();//清除所有缓存区的内容

                Response.Charset = "GB2312";//定义输出字符集

                Response.ContentEncoding = Encoding.Default;//输出内容的编码为默认编码

                Response.AddHeader("Content-Disposition", "attachment;filename=" + file.Name);

                //添加头信息。为“文件下载/另存为”指定默认文件名称

                Response.AddHeader("Content-Length", file.Length.ToString());

                //添加头文件,指定文件的大小,让浏览器显示文件下载的速度

                Response.WriteFile(file.FullName);// 把文件流发送到客户端

                Response.End();

            }

    五、具体实现和调用

       //压缩后的文件名

            

    var newlist = new List<string>();

         //条件要查找的文件s

                var path = XMLTools.getXmlValue("UpLoad", "Path");

                var filenames = CheckService.GetDirFiles(path, "*.dat", newlist);

                var zipname = DateTime.Now.ToString("yyyyMMdd");

                var zipdir = path + zipname + ".zip";

                if (!File.Exists(zipdir) == true)

                {

                    File.Delete(zipdir);

                }

                //创建压缩文件

                FileStream myFs = new FileStream(zipdir, FileMode.Create);

                StreamWriter mySw = new StreamWriter(myFs);

                mySw.Close();

                myFs.Close();

                //把文件压缩到压缩文件

                var listY = new List<string>();

                foreach (var f in filenames)

                {

                    //var fn = path + f + ".dat";

                     listY.Add(f + ".dat");

                }

                var fileNamesToZip = listY.ToArray();

                ZipFile(path, fileNamesToZip, zipdir, 7, null, "系统压缩");

                ResponseFile(zipdir);

     

  • 相关阅读:
    判断输入的年份是闰年还是平年!!!
    键盘接收数,接收运算符号进行运算!!
    eclipse项目上如何传到码云上!新手,简单易懂,希望对你有所帮助。
    jquery dialog弹出框简单写法和一些属性的应用,写的不好,大佬勿喷!谢谢!
    新手冒泡排序,随机生成十个数。
    新手java九九乘法表
    Lambda表达式
    如何删除gitee仓库的文件
    Collection方法
    java冒泡排序的几种写法
  • 原文地址:https://www.cnblogs.com/cotty/p/2424954.html
Copyright © 2011-2022 走看看