整理自网络

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

引用文件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. sql server创建表相关

    1,设置主键的sql的三种方式 a.字段名 int primary key b.字段名 int constraint 主键名 primary key clustered(字段名) c.创建表是,后置一 ...

  2. SQL Server 数据类型简介

    在 SELECT 的查询过程和查询结果中,每个列.变量.表达式和参数都具有一个相关的数据类型.数据类型用于指定某个对象可保存的数据的类型. SQL Server系统的数据类型主要有:数值类型.日期和时 ...

  3. 用LINQ在集合中查询特定对象

    这里是原文出处: 简单的概括LINQ LINQ是Language-Integrated Query的缩写,是C# 3.0和VB 9.0中新加入的语言特性,可以在编程时使用内置的查询语言进行基于集合的操 ...

  4. Cocos2d-x中的字符串

    在Cocos2d-x中能够使用的字符串constchar*.std::string和cocos2d::__String等,其中const char*是C风格的字符串,std::string是C++风格 ...

  5. Angular实现数据绑定,它实现原理是什么?

    简单的来说,就是给每个需要绑定的元素加上$watcher,缓存下oldValue,然后定时遍历所有的$watcher,比较newValue和oldValue,如果变化了就做更新的操作.

  6. 济南学习 Day 4 T2 am

    LYK 与实验室(lab)Time Limit:5000ms Memory Limit:64MB题目描述LYK 在一幢大楼里,这幢大楼共有 n 层,LYK 初始时在第 a 层上.这幢大楼有一个秘密实验 ...

  7. Z-Stack学习笔记

    Technorati 标签: Z-Stack profile 1. 栈配置profile 栈参数的集合需要被配置为一定的值,连同这些值在一起被称之为栈配置.ZigBee联盟定义了这些由栈配置组成的栈参 ...

  8. 【风马一族_xml】xmlp之dtd1

    什么是XML约束? 在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束 2. 为什么要使用xml约束? 参看提示栏 3. xml约束的作用? 约束xml的写法 对xml进行 ...

  9. 《Linux系统free命令的使用》学习笔记

    free命令用于显示当前系统的内存空闲和使用情况,其中包括物理内存,交换分区内存,内核缓冲区内存以及高速缓存,free的参数报错一下: -b ——字节的方式显示内存使用情况 [root@redhat ...

  10. jQuery的toggle()的自动触发真烦人

    jQuery的toggle()方法应该是在鼠标点击后才会触发,现在的问题是在ready加载后就自动触发了,怎么回事呢? 答案是jQuery的版本问题,在1.9以后的版本toggle()就存在这个问题, ...