ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版

时间:2008/10/4 10:56:54      阅读:6445          
''' <summary>
''' ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)
''' </summary>
''' <param name="_Request">Page.Request对象</param>
''' <param name="_Response">Page.Response对象</param>
''' <param name="_fileName">下载文件名</param>
''' <param name="_fullPath">带文件名下载路径</param>
''' <param name="_speed">每秒允许下载的字节数</param>
''' <returns>返回是否成功</returns>
''' <remarks>
''' '输出硬盘文件,提供下载 调用例
'''</remarks>
Public Shared Function ResponseFile(ByVal _Request As HttpRequest, ByVal _Response As HttpResponse, ByVal _fileName As String, ByVal _fullPath As String, ByVal _speed As Long) As Boolean
Try
Dim myFile As New System.IO.FileStream(_fullPath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)
Dim br As New System.IO.BinaryReader(myFile)
Try
_Response.AddHeader(
"Accept-Ranges", "bytes")
_Response.Buffer
= False
Dim fileLength As Long = myFile.Length
Dim startBytes As Long = 0

Dim pack As Integer = 10240
'10K bytes
'int sleep = 200; //每秒5次 即5*10K bytes每秒
Dim sleep As Integer = CInt(Math.Floor(1000 * pack / _speed)) + 1
If _Request.Headers("Range") IsNot Nothing Then
_Response.StatusCode
= 206
Dim range As String() = _Request.Headers("Range").Split(New Char() {"="c, "-"c})
startBytes
= Convert.ToInt64(range(1))
End If
_Response.AddHeader(
"Content-Length", (fileLength - startBytes).ToString())
If startBytes <> 0 Then
_Response.AddHeader(
"Content-Range", String.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength))
End If
_Response.AddHeader(
"Connection", "Keep-Alive")
_Response.ContentType
= "application/octet-stream"
_Response.AddHeader(
"Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8))

br.BaseStream.Seek(startBytes, System.IO.SeekOrigin.Begin)
Dim maxCount As Integer = CInt(Math.Floor((fileLength - startBytes) / pack)) + 1

For i As Integer = 0 To maxCount - 1
If _Response.IsClientConnected Then
_Response.BinaryWrite(br.ReadBytes(pack))
System.Threading.Thread.Sleep(sleep)
Else
i
= maxCount
End If
Next
Catch
Return False
Finally
br.Close()
myFile.Close()
End Try
Catch
Return False
End Try
Return True
End Function

调用实例:
Page.Response.Clear()
Dim success As Boolean = ResponseFile(Page.Request,Page.Response,"filename","C:\download.date",1024000)

If Not success Then
Response.Write(
"下载文件出错!")
End If

Page.Response.End()
评论
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2008/10/7 16:22:48) by chari 
    多多支持版主
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2008/10/10 8:33:53) by hawk1102 
    版主, up
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2008/10/13 15:35:00) by 不是雷锋 
    so good! i need it.
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2008/10/29 12:31:11) by leon 
    好东西哈
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2008/12/2 9:51:43) by todayming 
    good  very
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2008/12/5 15:31:31) by firedrake_sd 
    不错,终于找到我要多东细
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/2/11 15:43:11) by abc2009 
    很好很强大!
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/3/2 10:27:19) by ylp1588 
    如果有C#版的就更好了.
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/3/2 14:33:30) by weilen 
    能否实现下载时恢复文件原名?
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/4/25 18:11:28) by liufeng 
    不错,终于找到我要的东西
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/4/26 23:26:43) by ehan 
    好东西啊
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/5/28 10:11:55) by lijia7436 
    好东西~今天才看到~支持!
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/5/28 10:45:03) by lijia7436 
    VB很少用~如果有C#的就非常完美了~VB转C#总爱出单问题
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/6/12 19:30:15) by 引号 
    真是个好东西  感谢楼主!!!
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/6/14 17:23:06) by zzmsl 
    这只是demo,实际用的话是不行的。
  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/8/3 12:56:57) by haoren999 

    可以使用吗?

  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/9/20 23:31:25) by qqqqqq 

    <p>&lt;p&gt;真是个好东西&amp;nbsp; 感谢楼主!!!&lt;/p&gt;</p>

  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2009/11/26 21:34:22) by y2222 

    可以用C#写一个吗?

  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2010/2/8 20:35:24) by 鲍勃 

    很不错

  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2010/4/11 8:10:16) by 鍞愮敯 

    有C#版吗

  • Re:ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)VB.NET版  (2010/6/6 13:58:56) by wxq1404 

    web下可用吗

标 题:
 
姓 名:
 
主 页:

验证码:

评论:
 

Because of the cache,you may see your comments several minutes later.