zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    使用SOCKET实现TCP/IP协议的通讯
    多线程和高并发的区别
    linq学习之join
    Winform 创建桌面快捷方式并开机启动
    引领5G行业化,广和通荣获“IoT创新大奖”
    全方面的了解超宽带信号高速采集记录回放系统
    浅谈智慧灯杆的通信网建设要求
    逆向工程,调试Hello World !程序(更新中)
    融合智能将成时代方舟?中科创达技术大会向未来答疑
    第十一届蓝桥杯赛后体会和经验分享
  • 原文地址:https://www.cnblogs.com/ustcyc/p/3533241.html
Copyright © 2011-2022 走看看