欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp.net(c#)文件下載實現(xiàn)代碼

 更新時間:2009年11月30日 19:33:08   作者:  
本文通過一個實例向大家介紹用C#進(jìn)行Internet通訊編程的一些基本知識。我們知道.Net類包含了請求/響應(yīng)層、應(yīng)用協(xié)議層、傳輸層等層次。
復(fù)制代碼 代碼如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) { }
//TransmitFile實現(xiàn)下載
protected void Button1_Click(object sender, EventArgs e)
{
/* 微軟為Response對象提供了一個新的方法TransmitFile來解決使用Response.BinaryWrite 下載超過400mb的文件時導(dǎo)致Aspnet_wp.exe進(jìn)程回收而無法成功下載的問題。 代碼如下: */
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實現(xiàn)下載
protected void Button2_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("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}
//WriteFile分塊下載
protected void Button3_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)
{
const long ChunkSize = 102400;//100K 每次讀取文件,只讀取100K,這樣可以緩解服務(wù)器的壓力
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.txt";//客戶端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路徑 //以字符流的形式下載文件
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();
}
}

/*
這里提供4種常用下載方式 以供參考導(dǎo)讀:   
本文通過一個實例向大家介紹用C#進(jìn)行Internet通訊編程的一些基本知識。我們知道.Net類包含了請求/響應(yīng)層、應(yīng)用協(xié)議層、傳輸層等層次。在本程序中,我們運用了位于請求/響應(yīng)層的WebRequest類以及WebClient類等來實現(xiàn)高抽象程度的Internet通訊服務(wù)。本程序的功能是完成網(wǎng)絡(luò)文件的下載。   
實現(xiàn)原理
程序?qū)崿F(xiàn)的原理比較簡單,主要用到了WebClient類和FileStream類。其中WebClient類處于System.Net名字空間中,該類的主要功能是提供向URI標(biāo)識的資源發(fā)送數(shù)據(jù)和從URI標(biāo)識的資源接收數(shù)據(jù)的公共方法。我們利用其中的DownloadFile()方法將網(wǎng)絡(luò)文件下載到本地。然后用FileStream類的實例對象以數(shù)據(jù)流的方式將文件數(shù)據(jù)寫入本地文件。這樣就完成了網(wǎng)絡(luò)文件的下載。   
實現(xiàn)步驟   
首先,打開Visual Studio.Net,新建一個Visual C#Windows應(yīng)用程序的工程,不妨命名為“MyGetCar”。接著,布置主界面。我們先往主窗體上添加如下控件:兩個標(biāo)簽控件、兩個文本框控件、一個按鈕控件以及一個狀態(tài)欄控件。
設(shè)置各控件屬性如下:   
控件類型 控件名稱 屬性類型 屬性值 主窗體 Form1 Text屬性 文件下載器 標(biāo)簽控件 Label1 Text屬性 文件地址: TextAlign屬性 MiddleRight Label2 Text屬性 另存到: TextAlign屬性 MiddleRight 文本框控件 srcAddress Text屬性 (空) tarAddress Text屬性 (空) 按鈕控件 Start FlatStyle屬性 Flat Text屬性 開始下載 狀態(tài)欄控件 StatusBar Text屬性 (空)   
其他屬性可為默認(rèn)值,最終的主窗體如下圖所示:         
完成主窗體的設(shè)計,我們接著完成代碼的編寫。   
在理解了基本原理的基礎(chǔ)上去完成代碼的編寫是相當(dāng)容易。程序中我們主要用到的是WebClient類,不過在我們調(diào)用WebClient類的實例對象前,我們需要用WebRequest類的對象發(fā)出對統(tǒng)一資源標(biāo)識符(URI)的請求。
復(fù)制代碼 代碼如下:

try { WebRequest myre=WebRequest.Create(URLAddress); }
catch(WebException exp){
MessageBox.Show(exp.Message,"Error");
}

這是一個try-catch語句,try塊完成向URI的請求,catch塊則捕捉可能的異常并顯示異常信息。其中的URLAddress為被請求的網(wǎng)絡(luò)主機(jī)名。   在請求成功后,我們就可以運用WebClient類的實例對象中的DownloadFile()方法實現(xiàn)文件的下載了。其函數(shù)原型如下:   public void DownloadFile( string address, string fileName);   其中,參數(shù)address為從中下載數(shù)據(jù)的 URI,fileName為要接收數(shù)據(jù)的本地文件的名稱。   之后我們用OpenRead()方法來打開一個可讀的流,該流完成從具有指定URI的資源下載數(shù)據(jù)的功能。其函數(shù)原型如下:   public Stream OpenRead(string address);   其中,參數(shù)address同上。   最后就是新建一個StreamReader對象從中讀取文件的數(shù)據(jù),并運用一個while循環(huán)體不斷讀取數(shù)據(jù),只到讀完所有的數(shù)據(jù)。   
還有在使用以上方法時,你將可能需要處理以下幾種異常:   
● WebException:下載數(shù)據(jù)時發(fā)生錯誤。   
● UriFormatException:通過組合 BaseAddress、address 和 QueryString 所構(gòu)成的 URI 無效。   
這部分的代碼如下:(client為WebClient對象,在本類的開頭處聲明即可)
復(fù)制代碼 代碼如下:

statusBar.Text = "開始下載文件...";
client.DownloadFile(URLAddress,fileName);
Stream str = client.OpenRead(URLAddress);
StreamReader reader = new StreamReader(str);
byte[] mbyte = new byte[100000];
int allmybyte = (int)mbyte.Length;
int startmbyte = 0;
statusBar.Text = "正在接收數(shù)據(jù)...";
while(allmybyte>0){
int m = str.Read(mbyte,startmbyte,allmybyte);
if(m==0)
break;
startmbyte+=m;
allmybyte-=m;
}

完成了文件數(shù)據(jù)的讀取工作后,我們運用FileStream類的實例對象將這些數(shù)據(jù)寫入本地文件中:
FileStream fstr = new FileStream(Path,FileMode.OpenOrCreate,FileAccess.Write); fstr.Write(mbyte,0,startmbyte);
*/

相關(guān)文章

  • ASP.NET中常用輸出JS腳本的類實例

    ASP.NET中常用輸出JS腳本的類實例

    這篇文章主要介紹了ASP.NET中常用輸出JS腳本的類實例,針對過去的js腳本輸出類進(jìn)行了一定的改進(jìn),在進(jìn)行asp.net程序開發(fā)時非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • asp.net中c#自定義事件的實現(xiàn)方法詳解

    asp.net中c#自定義事件的實現(xiàn)方法詳解

    這篇文章主要介紹了asp.net中c#自定義事件的實現(xiàn)方法,較為詳細(xì)的分析了自定義實現(xiàn)的各個步驟的具體實現(xiàn)思路與技巧,并給出了一個完整的實例總結(jié),具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • 如何在網(wǎng)站級別動態(tài)更改主題

    如何在網(wǎng)站級別動態(tài)更改主題

    如何在網(wǎng)站級別動態(tài)更改主題...
    2007-04-04
  • asp.net下將Excel轉(zhuǎn)成XML檔的實現(xiàn)代碼

    asp.net下將Excel轉(zhuǎn)成XML檔的實現(xiàn)代碼

    通過Asp.net(C#)應(yīng)用程序讀取本地上傳的Excle文件,存放到DataSet中,通過DataSet中的方法直接生成XML文件.
    2009-11-11
  • asp.net request.PathInfo實現(xiàn)的url重寫

    asp.net request.PathInfo實現(xiàn)的url重寫

    最近對在開始研究url重寫,對重寫的原理以及重寫之后引起的性能問題是研究的重點,研究過程中發(fā)現(xiàn)了一種輕便的“url重寫方案”
    2009-04-04
  • C# ToString格式大全

    C# ToString格式大全

    需要將其它類型的變量,轉(zhuǎn)換為字符串類型的一些常見方法與屬性。
    2008-12-12
  • 讀取純真IP數(shù)據(jù)庫的公用組件接口QQWry.NET

    讀取純真IP數(shù)據(jù)庫的公用組件接口QQWry.NET

    這是一個讀取純真IP數(shù)據(jù)庫的公用組件接口,我是通過luma的《純真IP數(shù)據(jù)庫格式詳解》了解了純真IP數(shù)據(jù)庫數(shù)據(jù)格式,并且基于網(wǎng)絡(luò)上的一個IPLocation.dll源碼的基礎(chǔ)改編而來
    2013-06-06
  • net insert into語法錯誤詳解

    net insert into語法錯誤詳解

    本文說下net insert into語法錯誤的原理和解決方法
    2013-11-11
  • asp.net實現(xiàn)中英文多域名檢測的方法

    asp.net實現(xiàn)中英文多域名檢測的方法

    這篇文章主要介紹了asp.net實現(xiàn)中英文多域名檢測的方法,涉及asp.net針對URL中域名的解析及字符串操作相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • asp.net中使用log4net詳解

    asp.net中使用log4net詳解

    本文詳細(xì)講解了在asp.net中使用log4net的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論