原帖地址 http://msdn.microsoft.com/msdnmag/issues/06/09/WebDownloads/default.aspx
偶爾發現這篇文章,瀏覽了一下,把關鍵代碼COPY,留作紀念。
1.下載檔案而不是開啟檔案(Forcing a File Download Dialog):Setting the Content-Disposition Response HeaderSub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim dlDir As String = "downloadfiles/"
Dim strFileName As String = Request.QueryString("FileName")
Dim path As String = Server.MapPath( _
dlDir + Request.QueryString("FileName"))
Dim toDownload As System.IO.FileInfo = New System.IO.FileInfo(path)
If IsSafeFileName(strFileName) AndAlso toDownload.Exists Then
Response.Clear()
Response.AddHeader("Content-Disposition", _
"attachment; filename=" & toDownload.Name)
Response.AddHeader("Content-Length", _
file.Length.ToString())
Response.ContentType = "application/octet-stream"
Response.WriteFile(file.FullName)
Response.End()
Else
BindFileDataToGrid("Name")
End If
End Sub
2.分塊下載大檔案(Downloading Huge Files in Small Pieces):Writing File Chunks to the ClientSub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim dlDir As String = "downloadfiles/"
Dim strFileName As String = Request.QueryString("FileName")
Dim path As String = Server.MapPath( _
dlDir + Request.QueryString("FileName"))
Dim toDownload As System.IO.FileInfo = New System.IO.FileInfo(path)
If IsSafeFileName(strFileName) AndAlso toDownload.Exists Then
Const ChunkSize As Long = 10000
Dim buffer(ChunkSize) As Byte
Response.Clear()
Using iStream As FileStream = File.OpenRead(path)
Dim dataLengthToRead As Long = iStream.Length
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", _
"attachment; filename=" & toDownload.Name)
While dataLengthToRead > 0 AndAlso Response.IsClientConnected
Dim lengthRead As Integer = _
iStream.Read(buffer, 0, ChunkSize)
Response.OutputStream.Write(buffer, 0, lengthRead)
Response.Flush()
dataLengthToRead = dataLengthToRead - lengthRead
End While
End Using
Response.Close()
Else
BindFileDataToGrid("Name")
End If
End Sub
3.解決用BinaryWrite或下載大檔案導致大記憶體丟失:Using TransmitFileSub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim dlDir As String = "downloadfiles/"
Dim strFileName As String = Request.QueryString("FileName")
Dim path As String = Server.MapPath( _
dlDir + Request.QueryString("FileName"))
Dim toDownload As System.IO.FileInfo = New System.IO.FileInfo(path)
If IsSafeFileName(strFileName) AndAlso toDownload.Exists Then
Response.Clear()
Select Case System.IO.Path.GetExtension(strFileName)
Case ".zip"
Response.ContentType = "application/x-zip-compressed"
Response.AddHeader("Content-Disposition", _
"attachment;filename=NEWDL_" + toDownload.Name)
Response.TransmitFile(path)
Case Else
‘ File Extension not supported.
End Select
Response.End()
Else
BindFileDataToGrid("Name")
End If
End Sub