您的位置:首页 > 编程语言 > ASP

Asp.net 同时下载多个文件

2014-01-25 13:27 295 查看
整理自网络

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

引用文件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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: