整理自网络
下载思路是首先把多个文件进行压缩,然后再下载压缩成的压缩包
引用文件dll:ICSharpCode.SharpZipLib.dll
1. 合成下载文件夹
Protected Sub btn_down_click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_Down.Click If txtBz.Text.Trim = "" Then Page.ClientScript.RegisterClientScriptBlock(Me.[GetType](), "", "alert(‘请填写下载备注!‘);", True) Exit Sub End If Dim i As Integer Dim selcount As Integer = 0 Dim fileList As List(Of String) = New List(Of String)() If rptList.Items.Count > 0 Then For i = 0 To rptList.Items.Count - 1 Dim chk As CheckBox = rptList.Items(i).FindControl("cbkItem") If chk IsNot Nothing AndAlso chk.Checked Then selcount += 1 Dim filePath As HiddenField = rptList.Items(i).FindControl("hfUrl") Dim fileName As HiddenField = rptList.Items(i).FindControl("hfFileName") If filePath IsNot Nothing Then Dim root As String = Request.PhysicalApplicationPath Dim tmpUrl = root + filePath.Value fileList.Add(tmpUrl + "|" + fileName.Value) ‘最后结果为:路径|名称 End If End If Next End If Dim time As String = DateTime.Now.Ticks.ToString() Dim baseFolder As String = HttpContext.Current.Request.MapPath("~/UploadFile/TempWorkFlow/") If Not Directory.Exists(baseFolder) Then Directory.CreateDirectory(baseFolder) End If If selcount = 0 Then Page.ClientScript.RegisterClientScriptBlock(Me.[GetType](), "", "alert(‘请选择要下载的文件!‘);", True) Exit Sub Else ZipFileMain(fileList.ToArray(), baseFolder & time & ".zip", 9) ‘压缩文件 DownloadFile(Server.UrlEncode("附件.zip"), baseFolder & time & ".zip") ‘Response.Redirect("Download.aspx?FileName=" & Server.UrlEncode("附件.zip") & "&FilePath=" & baseFolder & time & ".zip") End If End Sub
2. 压缩下载函数
‘‘‘ <summary> ‘‘‘ 压缩文件 ‘‘‘ </summary> ‘‘‘ <param name="fileName">要压缩的所有文件(完全路径)</param> ‘‘‘ <param name="name">压缩后文件路径</param> ‘‘‘ <param name="Level">压缩级别</param> Public Shared Sub ZipFileMain(filenames As String(), name As String, Level As Integer) Dim s As New ZipOutputStream(File.Create(name)) Dim crc As New Crc32() ‘压缩级别 s.SetLevel(Level) ‘ 0 - store only to 9 - means best compression Try For Each file__1 As String In filenames ‘打开压缩文件 Dim fs As FileStream = File.OpenRead(file__1.Split("|"c)(0)) ‘文件地址 Dim buffer As Byte() = New Byte(fs.Length - 1) {} fs.Read(buffer, 0, buffer.Length) ‘建立压缩实体 Dim entry As New ZipEntry(file__1.Split("|"c)(1)) ‘原文件名 ‘时间 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) Next Catch ‘Throw Finally s.Finish() s.Close() End Try End Sub
3. 压缩下载函数
<table class="table table-hover table-bordered table-striped"> <thead> <tr> <th> <input id="cbkAll" type="checkbox" onclick="checkAll();" />选择 </th> <th width="20%">文件编号 </th> <th>文件名称 </th> <th>文件大小 </th> <th>分类 </th> <th>文件夹名 </th> </tr> </thead> <tbody> <asp:Repeater ID="rptList" runat="server" > <ItemTemplate> <tr> <td class="style2"> <asp:CheckBox runat="server" ID="cbkItem" /> <asp:HiddenField ID="hfID" runat="server" Value=‘<%#Eval("FileID").ToString()%>‘ /> <asp:HiddenField ID="hfUrl" runat="server" Value=‘<%#Eval("FilePath").ToString()%>‘ /> <asp:HiddenField ID="hfFileName" runat="server" Value=‘<%#Eval("FileName").ToString()%>‘ /> </td> <td> <%#Eval("FileID").ToString()%> </td> <td> <%#Eval("FileName").ToString()%> </td> <td align="center"> <%#Eval("FileSize").ToString()%> </td> <td> <%#Eval("ChannelName").ToString()%> </td> <td> <%#Eval("FolderName").ToString()%> <%--<asp:Label ID ="FileFolderName" runat="server"></asp:Label>--%> </td> </tr> </ItemTemplate> </asp:Repeater> </tbody> </table>