ASP.NET多文件批量打包下载

来源:互联网 发布:保税货物需要上传数据 编辑:程序博客网 时间:2024/06/10 00:54
在项目实施中,遇到了将多个文件一起打包后,提供给用户下载。如:在一个ASP.NET的开发项目中,通过一个GridView选中对应行数据的CheckBox,就可以实现对选中文件的打包下载了。

在对多文件打包中用到了 DotNetZip 的方法来实现对多文件压缩打包。需要到http://dotnetzip.codeplex.com/处下载该文件,然后引用即可。
Default.aspx:<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_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"><p><asp:Button ID="PackDown" runat="server" Text="打包下载" OnClick="PackDown_Click" /></p><asp:GridView ID="GridView1" runat="server" Width="500px"CellPadding="8" CellSpacing="1"><Columns><asp:TemplateField HeaderText="<input type="checkbox"/>" InsertVisible="False"><ItemTemplate><asp:CheckBox ID="CheckBox1" runat="server" /></ItemTemplate><ItemStyle HorizontalAlign="Center" /></asp:TemplateField><asp:TemplateField HeaderText="文件列表" InsertVisible="False"><EditItemTemplate><asp:Label ID="Label1" runat="server" Text='<%# eval_r("Name") %>'></asp:Label></EditItemTemplate><ItemTemplate><asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label></ItemTemplate></asp:TemplateField></Columns></asp:GridView></form></body></html>Default.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 Ionic.Zip;public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){BindFilesList();}}void BindFilesList(){List<System.IO.FileInfo> lstFI = new List<System.IO.FileInfo>();string[] files = System.IO.Directory.GetFiles("d:\\webroot");foreach (var s in files){lstFI.Add(new System.IO.FileInfo(s));}GridView1.DataSource = lstFI;GridView1.DataBind();}protected void PackDown_Click(object sender, EventArgs e){Response.Clear();Response.ContentType = "application/zip";Response.AddHeader("content-disposition", "filename=DotNetZip.zip");using (ZipFile zip = new ZipFile(System.Text.Encoding.Default))//解决中文乱码问题{foreach (GridViewRow gvr in GridView1.Rows){if (((CheckBox)gvr.Cells[0].Controls[1]).Checked){zip.AddFile("d:\\webroot\\" + (gvr.Cells[1].Controls[1] as Label).Text, "");}}zip.Save(Response.OutputStream);}Response.End();}}
原文地址:http://www.2cto.com/kf/201205/130901.html