一
//TransmitFile實現下載
protectedvoid Button
_Click(object sender
EventArgs e)
{
/*
微軟為Response對象提供了一個新的方法TransmitFile來解決使用Response
BinaryWrite
下載超過
mb的文件時導致Aspnet_wp
exe進程回收而無法成功下載的問題
代碼如下
*/
Response
ContentType =
application/x
zip
compressed
;
Response
AddHeader(
Content
Disposition
attachment;filename=z
zip
)
string filename = Server
MapPath(
DownLoad/z
zip
)
Response
TransmitFile(filename)
}
二
//WriteFile實現下載
protectedvoid Button
_Click(object sender
EventArgs e)
{
/*
using System
IO;
*/
string fileName =
asd
txt
;//客戶端保存的文件名
string filePath = Server
MapPath(
DownLoad/aaa
txt
)
//路徑
FileInfo fileInfo =new FileInfo(filePath)
Response
Clear()
Response
ClearContent()
Response
ClearHeaders()
Response
AddHeader(
Content
Disposition
attachment;filename=
+ fileName)
Response
AddHeader(
Content
Length
fileInfo
Length
ToString())
Response
AddHeader(
Content
Transfer
Encoding
binary
)
Response
ContentType =
application/octet
stream
;
Response
ContentEncoding = System
Text
Encoding
GetEncoding(
gb
)
Response
WriteFile(fileInfo
FullName)
Response
Flush()
Response
End()
}
三
//WriteFile分塊下載
protectedvoid Button
_Click(object sender
EventArgs e)
{
string fileName =
aaa
txt
;//客戶端保存的文件名
string filePath = Server
MapPath(
DownLoad/aaa
txt
)
//路徑
System
IO
FileInfo fileInfo =new System
IO
FileInfo(filePath)
if (fileInfo
Exists ==true)
{
constlong ChunkSize =
;//
K 每次讀取文件
只讀取
K
這樣可以緩解服務器的壓力
byte[] buffer =newbyte[ChunkSize];
Response
Clear()
System
IO
FileStream iStream = System
IO
File
OpenRead(filePath)
long dataLengthToRead = iStream
Length;//獲取下載的文件總大小
Response
ContentType =
application/octet
stream
;
Response
AddHeader(
Content
Disposition
attachment; filename=
+ HttpUtility
UrlEncode(fileName))
while (dataLengthToRead >
&& Response
IsClientConnected)
{
int lengthRead = iStream
Read(buffer
Convert
ToInt
(ChunkSize))
//讀取的大小
Response
OutputStream
Write(buffer
lengthRead)
Response
Flush()
dataLengthToRead = dataLengthToRead
lengthRead;
}
Response
Close()
}
}
四
//流方式下載
protectedvoid Button
_Click(object sender
EventArgs e)
{
string fileName =
aaa
txt
;//客戶端保存的文件名
string filePath = Server
MapPath(
DownLoad/aaa
txt
)
//路徑
//以字符流的形式下載文件
FileStream fs =new FileStream(filePath
FileMode
Open)
byte[] bytes =newbyte[(int)fs
Length];
fs
Read(bytes
bytes
Length)
fs
Close()
Response
ContentType =
application/octet
stream
;
//通知浏覽器下載文件而不是打開
Response
AddHeader(
Content
Disposition
attachment; filename=
+ HttpUtility
UrlEncode(fileName
System
Text
Encoding
UTF
))
Response
BinaryWrite(bytes)
Response
Flush()
Response
End()
}
//
publicvoid DownloadFile( System
Web
UI
Page WebForm
String FileNameWhenUserDownload
String FileBody )
{
WebForm
Response
ClearHeaders()
WebForm
Response
Clear()
WebForm
Response
Expires =
;
WebForm
Response
Buffer =true;
WebForm
Response
AddHeader(
Accept
Language
zh
tw
)
//
文件名稱
WebForm
Response
AddHeader(
content
disposition
attachment; filename=
+System
Web
HttpUtility
UrlEncode(FileNameWhenUserDownload
System
Text
Encoding
UTF
)+
)
WebForm
Response
ContentType =
Application/octet
stream
;
//
文件內容
WebForm
Response
Write(FileBody)
//
WebForm
Response
End()
}
//上面這段代碼是下載一個動態產生的文本文件
若這個文件已經存在於服務器端的實體路徑
則可以通過下面的函數
publicvoid DownloadFileByFilePath( System
Web
UI
Page WebForm
String FileNameWhenUserDownload
String FilePath )
{
WebForm
Response
ClearHeaders()
WebForm
Response
Clear()
WebForm
Response
Expires =
;
WebForm
Response
Buffer =true;
WebForm
Response
AddHeader(
Accept
Language
zh
tw
)
//文件名稱
WebForm
Response
AddHeader(
content
disposition
attachment; filename=
+ System
Web
HttpUtility
UrlEncode(FileNameWhenUserDownload
System
Text
Encoding
UTF
) +
)
WebForm
Response
ContentType =
Application/octet
stream
;
//文件內容
WebForm
Response
Write(System
IO
File
Rea}dAllBytes(FilePath))
//
WebForm
Response
End()
}
From:http://tw.wingwit.com/Article/program/net/201311/12214.html