asp.net下载的三种方式
生活随笔
收集整理的這篇文章主要介紹了
asp.net下载的三种方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Code
?protected?void?Button1_Click(object?sender,?EventArgs?e)
?????{
????????/*
??????????微軟為Response對象提供了一個新的方法TransmitFile來解決使用Response.BinaryWrite
??????????下載超過400mb的文件時導致Aspnet_wp.exe進程回收而無法成功下載的問題。
??????????代碼如下:
?????????*/
?????????Response.ContentType?=?"application/x-zip-compressed";
?????????Response.AddHeader("Content-Disposition",?"attachment;filename=z.zip");
????????string?filename?=?Server.MapPath("DownLoad/aaa.zip");
?????????Response.TransmitFile(filename);
?????}
????//WriteFile實現下載
????protected?void?Button2_Click(object?sender,?EventArgs?e)
?????{
????????/*
??????????using?System.IO;
?????????
?????????*/
????????string?fileName?="aaa.zip";//客戶端保存的文件名
????????string?filePath=Server.MapPath("DownLoad/aaa.zip");//路徑
?????????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("gb2312");
?????????Response.WriteFile(fileInfo.FullName);
?????????Response.Flush();
?????????Response.End();
?????}
????//WriteFile分塊下載
????protected?void?Button3_Click(object?sender,?EventArgs?e)
?????{
????????string?fileName?=?"aaa.zip";//客戶端保存的文件名
????????string?filePath?=?Server.MapPath("DownLoad/aaa.zip");//路徑
?????????System.IO.FileInfo?fileInfo?=?new?System.IO.FileInfo(filePath);
????????if?(fileInfo.Exists?==?true)
?????????{
????????????const?long?ChunkSize?=?102400;//100K?每次讀取文件,只讀取100K,這樣可以緩解服務器的壓力
????????????byte[]?buffer?=?new?byte[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?>?0?&&?Response.IsClientConnected)
?????????????{
????????????????int?lengthRead?=?iStream.Read(buffer,?0,?Convert.ToInt32(ChunkSize));//讀取的大小
?????????????????Response.OutputStream.Write(buffer,?0,?lengthRead);
?????????????????Response.Flush();
?????????????????dataLengthToRead?=?dataLengthToRead?-?lengthRead;
?????????????}
?????????????Response.Close();
?????????}
?????}
????//流方式下載
????protected?void?Button4_Click(object?sender,?EventArgs?e)
?????{
????????string?fileName?=?"aaa.zip";//客戶端保存的文件名
????????string?filePath?=?Server.MapPath("DownLoad/aaa.zip");//路徑
????????//以字符流的形式下載文件
?????????FileStream?fs?=?new?FileStream(filePath,?FileMode.Open);
????????byte[]?bytes?=?new?byte[(int)fs.Length];
?????????fs.Read(bytes,?0,?bytes.Length);
?????????fs.Close();
?????????Response.ContentType?=?"application/octet-stream";
????????//通知瀏覽器下載文件而不是打開
?????????Response.AddHeader("Content-Disposition",?"attachment;???filename="?+?HttpUtility.UrlEncode(fileName,?System.Text.Encoding.UTF8));
?????????Response.BinaryWrite(bytes);
?????????Response.Flush();
?????????Response.End();
?????}
?protected?void?Button1_Click(object?sender,?EventArgs?e)
?????{
????????/*
??????????微軟為Response對象提供了一個新的方法TransmitFile來解決使用Response.BinaryWrite
??????????下載超過400mb的文件時導致Aspnet_wp.exe進程回收而無法成功下載的問題。
??????????代碼如下:
?????????*/
?????????Response.ContentType?=?"application/x-zip-compressed";
?????????Response.AddHeader("Content-Disposition",?"attachment;filename=z.zip");
????????string?filename?=?Server.MapPath("DownLoad/aaa.zip");
?????????Response.TransmitFile(filename);
?????}
????//WriteFile實現下載
????protected?void?Button2_Click(object?sender,?EventArgs?e)
?????{
????????/*
??????????using?System.IO;
?????????
?????????*/
????????string?fileName?="aaa.zip";//客戶端保存的文件名
????????string?filePath=Server.MapPath("DownLoad/aaa.zip");//路徑
?????????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("gb2312");
?????????Response.WriteFile(fileInfo.FullName);
?????????Response.Flush();
?????????Response.End();
?????}
????//WriteFile分塊下載
????protected?void?Button3_Click(object?sender,?EventArgs?e)
?????{
????????string?fileName?=?"aaa.zip";//客戶端保存的文件名
????????string?filePath?=?Server.MapPath("DownLoad/aaa.zip");//路徑
?????????System.IO.FileInfo?fileInfo?=?new?System.IO.FileInfo(filePath);
????????if?(fileInfo.Exists?==?true)
?????????{
????????????const?long?ChunkSize?=?102400;//100K?每次讀取文件,只讀取100K,這樣可以緩解服務器的壓力
????????????byte[]?buffer?=?new?byte[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?>?0?&&?Response.IsClientConnected)
?????????????{
????????????????int?lengthRead?=?iStream.Read(buffer,?0,?Convert.ToInt32(ChunkSize));//讀取的大小
?????????????????Response.OutputStream.Write(buffer,?0,?lengthRead);
?????????????????Response.Flush();
?????????????????dataLengthToRead?=?dataLengthToRead?-?lengthRead;
?????????????}
?????????????Response.Close();
?????????}
?????}
????//流方式下載
????protected?void?Button4_Click(object?sender,?EventArgs?e)
?????{
????????string?fileName?=?"aaa.zip";//客戶端保存的文件名
????????string?filePath?=?Server.MapPath("DownLoad/aaa.zip");//路徑
????????//以字符流的形式下載文件
?????????FileStream?fs?=?new?FileStream(filePath,?FileMode.Open);
????????byte[]?bytes?=?new?byte[(int)fs.Length];
?????????fs.Read(bytes,?0,?bytes.Length);
?????????fs.Close();
?????????Response.ContentType?=?"application/octet-stream";
????????//通知瀏覽器下載文件而不是打開
?????????Response.AddHeader("Content-Disposition",?"attachment;???filename="?+?HttpUtility.UrlEncode(fileName,?System.Text.Encoding.UTF8));
?????????Response.BinaryWrite(bytes);
?????????Response.Flush();
?????????Response.End();
?????}
轉載于:https://www.cnblogs.com/jame-peng1028/archive/2008/08/26/1276277.html
總結
以上是生活随笔為你收集整理的asp.net下载的三种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经常梦到去世的亲人好吗
- 下一篇: 期待已久的VS2008 SP1 和.NE