Asp.net 同时下载多个文件

整理自网络

下载思路是首先把多个文件进行压缩,然后再下载压缩成的压缩包

引用文件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>

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。