整理自网络

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

引用文件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 =
Dim fileList As List(Of String) = New List(Of String)()
If rptList.Items.Count > Then
For i = To rptList.Items.Count -
Dim chk As CheckBox = rptList.Items(i).FindControl("cbkItem")
If chk IsNot Nothing AndAlso chk.Checked Then
selcount +=
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 = Then
Page.ClientScript.RegisterClientScriptBlock(Me.[GetType](), "", "alert('请选择要下载的文件!');", True)
Exit Sub
Else
ZipFileMain(fileList.ToArray(), baseFolder & time & ".zip", )
'压缩文件
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)())
'文件地址
Dim buffer As Byte() = New Byte(fs.Length - ) {}
fs.Read(buffer, , buffer.Length) '建立压缩实体
Dim entry As New ZipEntry(file__1.Split("|"c)())
'原文件名
'时间
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, , 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>

Asp.net 同时下载多个文件的更多相关文章

  1. Asp.net mvc 下载文件

    前言 最近有需求需要下载文件,可能是image的图片,也可能是pdf报告,也可能是微软的word或者excel文件. 这里就整理了asp.net mvc 和asp.net webapi 下载的方法 A ...

  2. ASP.NET批量下载文件的方法

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  3. ASP.NET批量下载文件

    一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到 ...

  4. asp.net mvc5 下载文件方法

    控制器自带的 FileContentResult 可以让我们很方便的返回文件到服务端,减少了很多步骤.用于下载文件的时候,像视频.文本.图片这种浏览器支持的文件,默认就会被浏览器打开.这时候想让它变成 ...

  5. Asp.Net MVC 实现将Easy-UI展示数据下载为Excel 文件

    在一个项目中,需要做一个将Easy-UI界面展示数据下载为Excel文件的功能,经过一段时间努力,完成了一个小Demo.界面如下: 但按下导出Excel后,Excel文件将会下载到本地,在office ...

  6. ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求

    我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...

  7. ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求

    通过调用ApplicationBuilder的扩展方法UseStaticFiles注册的StaticFileMiddleware中间件帮助我们处理针对文件的请求.对于StaticFileMiddlew ...

  8. ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介

    概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware ...

  9. ASP.NET跨服务器上传文件的相关解决方案

    第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ ...

随机推荐

  1. 教你21天学会C++ (有图有真相)

    这张图,是在一位有十多年开发经验的资深前辈博客里看到的,觉得很有趣,分享之~ 这位大神的博客是:http://coolshell.cn 理论是可行的,当你刚开始学习C++,到第21天的时候出门千万要小 ...

  2. DWZ (JUI) 教程 tree 控件的选中事件

    DWZ (JUI) 教程 tree 控件的选中事件 先简单说一下流程 第一步 当然是先定义好回调事件了 function checkCallback(json){ ........... ...... ...

  3. JavaScript中Array的一些实用操作技巧

    最近在调试JSP页面时频繁与ajax打交道,在复杂场景下,ajax传参数就需要对大量参数进行处理.这时我才发现,熟练Array的处理真的会使开发轻松不少!! 关于Array Array的创建很灵活,可 ...

  4. C++ 11 之Lambda

    1.Lambda表达式来源于函数式编程,说白就了就是在使用的地方定义函数,有的语言叫“闭包”,如果 lambda 函数没有传回值(例如 void ),其回返类型可被完全忽略. 定义在与 lambda ...

  5. 利用word2vec对关键词进行聚类

    1.收集预料 自己写个爬虫去收集网页上的数据. 使用别人提供好的数据http://www.sogou.com/labs/dl/ca.html 2.对预料进行去噪和分词 我们需要content其中的值, ...

  6. F. Igor and Interesting Numbers

    http://codeforces.com/contest/747/problem/F cf #387 div2 problem f 非常好的一道题.看完题,然后就不知道怎么做,感觉是dp,但是不知道 ...

  7. 【风马一族_Android】Button 按钮之记录

    Button button = new Button(); Button button = (Button)findViewById(R.id.bt_button);//让按钮显示灰色,失效 butt ...

  8. Android 悬浮窗 WindowManager WindowManager.LayoutParamas

    前方高清大图~~~~ 绘制的图片资源: // draw bitmap BitmapDrawable bmpDraw = (BitmapDrawable) getResources().getDrawa ...

  9. js设计模式(3)---桥接模式

    0.前言 看设计模式比较痛苦,一则是自己经验尚浅,不能体会到使用这些设计模式的益处:二则是不能很好把握使用这些设计模式的时机.所以这一部分看得断断续续,拖拖拉拉,为了了却这快心病,决定最近一口气看完几 ...

  10. 【转】IL编织 借助PostSharp程序集实现AOP

    ref:   C# AOP实现方法拦截器 在写程序的时候,很多方法都加了.日志信息.比如打印方法开始,方法结束,错误信息,等等. 由于辅助性功能的代码几乎是完全相同的,这样就会令同样的代码在各个函数中 ...