1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MultipleFileDownLoadSample._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="btDownload" runat="server" Text="下载" onclick="btDownload_Click"
style="height: 26px" />
<hr /> <asp:GridView ID="gv" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chk" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="文件名">
<ItemTemplate>
<asp:Label ID="file" runat="server" Text='<%# Eval("FileName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>

2.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using ICSharpCode.SharpZipLib.Zip; namespace MultipleFileDownLoadSample
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
DataBind();
}
}
public override void DataBind()
{
//读取images目录下面的文件列表,绑定到GridView上面
var query = from item in Directory.GetFiles(Server.MapPath("~/images"))
select new
{
FileName = Path.GetFileName(item)
}; gv.DataSource = query;
gv.DataBind();
} private void Download(IEnumerable<string> files,string zipFileName ){
//根据所选文件打包下载
MemoryStream ms = new MemoryStream();
byte[] buffer = null; using (ZipFile file = ZipFile.Create(ms))
{
file.BeginUpdate();
file.NameTransform = new MyNameTransfom();//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。 foreach (var item in files)
{
file.Add(Server.MapPath(string.Format("~/images/{0}",item)));
} try
{
file.CommitUpdate();
}
catch(Exception ex)
{
throw new Exception(ex.Message);
} buffer = new byte[ms.Length];
ms.Position = ;
ms.Read(buffer, , buffer.Length);
} Response.AddHeader("content-disposition", "attachment;filename="+zipFileName);
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
} protected void btDownload_Click(object sender, EventArgs e)
{
//var urls1 = "upload/file/82cbf858-92d9-4a82-95f7-7c9ba75004c7.jpg;upload/file/0df0dd6c-7d10-43ac-b583-e0a67eea9ba0.jpg;upload/file/d83d903f-4850-4607-a65d-4ac1a96d3791.jpg;upload/file/f0b23b86-4461-4ebd-8afe-eced6784a8dc.jpg;upload/file/c4062bd1-56cd-4801-b5f1-aa29f7b0cd44.jpg;upload/file/eb5bd59d-adee-4ac0-8ae7-706a9d8df0fc.pdf;upload/file/46ef5099-9480-4c47-9a09-8e585a7d97ff.txt;upload/file/7a20cd9e-c0a4-4fd6-9998-40d4d6d835fb.txt;upload/file/37842f30-aa10-4433-a641-55010c8a0efc.doc;upload/file/e8575946-9f09-4aed-b9dd-a4f0d3f617e0.png;upload/file/745f8304-8175-4e6c-9200-f5c3c95dcbd8.doc;upload/file/9372ba27-c05b-4873-91a0-3d3e5ffff9b6.xls;upload/file/160f5052-86e7-400e-aa13-7427af409f3d.txt;upload/file/8fcd56ee-e06b-46b4-b100-52f4349688b1.txt;upload/file/f11e433e-fad7-4b61-8a0e-a5bd7650ce4c.txt;upload/file/4410e83d-cc6f-4d24-91af-a117979f6bc0.jpg;upload/file/3bf0b545-38c0-4e24-a8a6-25dc5ea97eea.jpg;upload/file/22e3ea67-fcad-4d58-b39e-048661608ae8.jpg;upload/file/cc6162ca-8640-4f26-ad39-71ec1b287eae.txt;upload/file/cfcd3c53-ff84-4a54-bf3c-85dd5b3e8e6d.pdf;upload/file/668404f7-e808-4d3a-8818-d01fbba1f42f.pdf;upload/file/59f8d59d-4d3b-4262-83ab-bd18d5f345e3.pdf;upload/file/9da50650-daff-40b3-b9c9-4067b3f565bd.jpg;upload/file/1a3150a3-eecb-48c1-aabb-e5d4f6847ca4.jpg;upload/file/dfe943ed-6432-424e-a881-70442dc833de.jpg;upload/file/4a2005a1-f68f-4289-979a-b7d936383a7c.jpg;upload/file/9a208b9e-2591-45bd-800a-1d67ef974cce.jpg;upload/file/f00b9046-7f4a-4154-af71-662ff7b5ec3e.jpg;upload/file/57c03a84-02bc-43f9-8f8a-d158ad67c9cf.doc;upload/file/3761e5a4-4238-4234-8ea5-c3d90987ae3c.xls;upload/file/5c8a60f4-ac9e-4b65-9f26-3d7073ff9762.txt;upload/file/add4390c-ed11-40b4-a599-9553a308ee02.txt;upload/file/cb790b7b-2c50-48f6-b82c-eda06c6b2fc4.txt;upload/file/c3ccfef9-4a76-4767-9ad3-e197c2667d0c.txt;upload/file/048066be-081e-4bf8-be24-abca2ee560c0.xls;upload/file/506f7f11-dd40-4838-b1cf-af4382f6b8d6.jpg;upload/file/4201a8b1-96f1-4312-9736-0eb682263b90.jpg;upload/file/be2963b7-66bc-4f5f-bb42-886ec08c11ab.txt;upload/file/4f455ab5-42f8-4a01-b21c-1627aff73706.jpg;";
//var urls = urls1.TrimEnd(';');
//根据复选框的选中状态,将多个文件打包下载
List<string> files = new List<string>();
//string[] urlstrs = urls.Split(';');
//foreach (var a in urlstrs)
//{
// files.Add(a);
//}
foreach (GridViewRow item in gv.Rows)
{
var chk = item.FindControl("chk") as CheckBox;
if (chk.Checked)
{
var label = item.FindControl("file") as Label;
files.Add(label.Text);
}
} Download(files, "Test.zip");
}
} public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform
{ #region INameTransform 成员 public string TransformDirectory(string name)
{
return null;
} public string TransformFile(string name)
{
return Path.GetFileName(name);
} #endregion
}
}

asp.net 批量下载实现(打包压缩下载)的更多相关文章

  1. 批量下载,多文件压缩打包zip下载

    0.写在前面的话 图片批量下载,要求下载时集成为一个压缩包进行下载.从昨天下午折腾到现在,踩坑踩得莫名其妙,还是来唠唠,给自己留个印象的同时,也希望给需要用到这个方法的人带来一些帮助. 1.先叨叨IO ...

  2. java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩

    现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...

  3. ASP.NET批量下载文件的方法

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  4. ASP.NET批量下载文件

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  5. Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转

    一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了Byt ...

  6. 用Spring中的ResponseEntity文件批量压缩下载

    我看了很多网上的demo,先生成ZIP压缩文件,然后再下载. 我这里是生成ZIP文件流 进行下载.(核心代码没多少,就是一些业务代码) @RequestMapping(value = "/& ...

  7. 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

    总结:                                                          使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...

  8. Java批量压缩下载

    最近做了一些有关批量压缩下载的功能,网上也找了一些资源,但都不是太全面,所以自己整理一份,已备不时之需. 直接上代码: // 获取项目路径 private static String WEBCLASS ...

  9. asp.net批量下载

    1.首先读取文件夹下的文件,可能同时存在多个文件 2.选中文件,然后点击下载,同时可以选择多个文件. 思路:通过生产压缩包的形式进行下载,然后再清楚压缩包,这样用户可以一次性全部下载下来. 一.获取目 ...

随机推荐

  1. Delphi如何让程序最小化到任务栏(截取WM_SYSCOMMAND后,调用Shell_NotifyIcon)

    现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功 ...

  2. 【POJ】2117 Electricity

    无向图求割点和连通块. /* POJ2117 */ #include <iostream> #include <vector> #include <algorithm&g ...

  3. 使用 Chef 管理 Azure 资源

     发布于 2014-07-08 作者 陈 忠岳 Chef 是一款开源的开发运营(DevOps)工具,用以应对 IT 基础设施方面的挑战.微软开放技术有限公司(简称"微软开放技术" ...

  4. 2015第45周五IE11实用开发工具摘录及设置IE缓存

    UI响应工具的作用 UI响应工具顾名思义就是查看UI响应时间的工具,通过这个工具可以帮助我们确定应用中的哪些组件占用了多少CPU时间,让我们之后可以更有针对性的进行优化,从而最大限度地改善应用性能,同 ...

  5. MySQL安装没有弹出配置向导

    安装MySQL过程中一切都正常只是没有弹出MySQL配置向导对话框,即出现"launch the MySQL Instance Configuration Wizard" fini ...

  6. 机器安装第二个tomcat ,出现报错如何解决

    1.本机安装第二个 tomcat 后,出现 报错如下图所示 最后解决办法 是 在安装的时候  ,windows 服务名称 和 另一个tomcat  起不一样的 名称就可以了 如下图

  7. 【转】 各种 基于Unity3d 引擎的Android游戏优化 (drawcall)

     合并纹理,减少贴图数量,合并网格,ui上减少不必要的层级叠加关系等   1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种,每家的GPU支持不同的压缩格式 ...

  8. simulink下直接代码生成

    连接好DSP,打开Matlab,首先必须要更改环境,要不不能编译通过 输入C2000lib,打开库, 在C2833X DSP Chip Support中添加外设,然后在C2000 Target Pre ...

  9. [转]让程序在崩溃时体面的退出之SEH

    原文地址:http://blog.csdn.net/starlee/article/details/6636723 SEH的全称是Structured Exception Handling,是Wind ...

  10. 数学常数e的含义

    转载:   http://www.ruanyifeng.com/blog/2011/07/mathematical_constant_e.html 作者: 阮一峰 日期: 2011年7月 9日 1. ...