欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net实现多个文件同时下载功能

程序员文章站 2023-10-21 21:45:08
本文实例为大家分享了asp.net多个文件同时下载的具体代码,供大家参考,具体内容如下 1、首先读取文件夹下的文件,可能同时存在多个文件 2、选中文件,然后点击下载,同...

本文实例为大家分享了asp.net多个文件同时下载的具体代码,供大家参考,具体内容如下

1、首先读取文件夹下的文件,可能同时存在多个文件

2、选中文件,然后点击下载,同时可以选择多个文件。

思路:通过生产压缩包的形式进行下载,然后再清楚压缩包,这样用户可以一次性全部下载下来。

一、获取目录下的所有文件,然后绑定到checkboxlist中 ,代码如下:

 ckl_ck.items.clear();
 directoryinfo thefolder = new directoryinfo(server.mappath("resource/help"));
 //遍历文件夹下的文件
 foreach (fileinfo nextfile in thefolder.getfiles())
  this.ckl_ck.items.add(nextfile.name);


二、选中文件后,点击下载按钮。代码:

 protected void btn_down_click(object sender, eventargs e)
 {
 if (ckl_ck.items.count > 0)
 {
  list<string> listfj = new list<string>();//保存附件路径
  list<string> listfjname = new list<string>();//保存附件名字
  for (int i = 0; i < ckl_ck.items.count; i++)
  {
  if (ckl_ck.items[i].selected)
  {
   listfj.add(server.mappath("resource/help/") + ckl_ck.items[i].text);
   listfjname.add(ckl_ck.items[i].text);
  }

  }
  string time = datetime.now.ticks.tostring();
  zipfilemain(listfj.toarray(), listfjname.toarray(), server.mappath("resource/help/" + time + ".zip"), 9);//压缩文件
  downloadfile(server.urlencode("附件.zip"), server.mappath("resource/help/" + time + ".zip"));//下载文件
 }
 }
 private void downloadfile(string filename, string filepath)
 {
 fileinfo fileinfo = new fileinfo(filepath);
 response.clear();
 response.clearcontent();
 response.clearheaders();
 response.addheader("content-disposition", "attachment;filename=" + filename);
 response.addheader("content-length", fileinfo.length.tostring());
 response.addheader("content-transfer-encoding", "binary");
 response.contenttype = "application/octet-stream";
 response.contentencoding = system.text.encoding.getencoding("gb2312");
 response.writefile(fileinfo.fullname);
 response.flush();
 file.delete(filepath);//删除已下载文件
 response.end();
 }

 /// <summary>
 /// 压缩文件
 /// </summary>
 /// <param name="filename">要压缩的所有文件(完全路径)</param>
 /// <param name="filename">文件名称</param>
 /// <param name="name">压缩后文件路径</param>
 /// <param name="level">压缩级别</param>
 public void zipfilemain(string[] filenames, string[] filename, string name, int level)
 {
 zipoutputstream s = new zipoutputstream(file.create(name));
 crc32 crc = new crc32();
 //压缩级别
 s.setlevel(level); // 0 - store only to 9 - means best compression
 try
 {
  int m = 0;
  foreach (string file in filenames)
  {
  //打开压缩文件
  filestream fs = file.openread(file);//文件地址
  byte[] buffer = new byte[fs.length];
  fs.read(buffer, 0, buffer.length);
  //建立压缩实体
  zipentry entry = new zipentry(filename[m].tostring());//原文件名
  //时间
  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);
  m++;
  }
 }
 catch
 {
  throw;
 }
 finally
 {
  s.finish();
  s.close();
 }
 }

三、系统中需要引用的dll 需要。

四、运行效果如图:

asp.net实现多个文件同时下载功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。