可以控制文件大小 下载名称 单块数据大小 单块数据间隔 以及MIME类型 很好用
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
Public Shared Function ResponseFile()Function ResponseFile(ByVal _Request As HttpRequest, ByVal _Response As HttpResponse, ByVal _fileName As String, ByVal _fullPath As String, ByVal BlockSize As Long, ByVal sleep As Integer, Optional ByVal MIMEType As String = "application/octet-stream") As Boolean
Try
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
Dim myFile As New FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
![](/Images/OutliningIndicators/InBlock.gif)
Dim br As New BinaryReader(myFile)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
Try
![](/Images/OutliningIndicators/InBlock.gif)
_Response.AddHeader("Accept-Ranges", "bytes")
_Response.Buffer = False
Dim fileLength As Long = myFile.Length
Dim startBytes As Long = 0
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
If (Not _Request.Headers("Range") Is Nothing) Then
_Response.StatusCode = 206
Dim range() As String = _Request.Headers("Range").Split("=-".ToCharArray)
startBytes = Convert.ToInt64(range(1))
![](/Images/OutliningIndicators/InBlock.gif)
End If
![](/Images/OutliningIndicators/InBlock.gif)
_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))
![](/Images/OutliningIndicators/InBlock.gif)
End If
_Response.AddHeader("Connection", "Keep-Alive")
_Response.ContentType = MIMEType
_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8))
![](/Images/OutliningIndicators/InBlock.gif)
br.BaseStream.Seek(startBytes, SeekOrigin.Begin)
Dim maxCount As Integer = CInt(Math.Floor((fileLength - startBytes) / BlockSize) + 1)
For i As Integer = 0 To maxCount - 1
![](/Images/OutliningIndicators/InBlock.gif)
If _Response.IsClientConnected Then
_Response.BinaryWrite(br.ReadBytes(BlockSize))
Thread.Sleep(sleep)
![](/Images/OutliningIndicators/InBlock.gif)
Else
i = maxCount
End If
![](/Images/OutliningIndicators/InBlock.gif)
Next
Catch ex As Exception
![](/Images/OutliningIndicators/InBlock.gif)
Return False
End Try
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
Catch ex As Exception
![](/Images/OutliningIndicators/InBlock.gif)
Return False
![](/Images/OutliningIndicators/InBlock.gif)
End Try
End Function
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)