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 需要。
四、运行效果如图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。