摘要:[C#][ASP.Net]FTP上的單檔下載
這裡列出三種下載方法:WebRequest,FtpWebRequest,以及WebClient。
這裡列出三種下載方法:WebRequest,FtpWebRequest,以及WebClient。
假設你有一個字串變數url記錄著要下載檔案的網路位址如下

第一種方法 WebRequest
01 
using System.Net; //別忘記引用這個namespace
02
public string DownloadFile(string url, string username, string pw)
03
{
04
string strResult = "";
05
try
06
{
07
//最好使用Uri物件代替url字串,理由可以參考這邊.
08
//http://msdn.microsoft.com/zh-tw/library/ms182360.aspx
09
WebRequest oRequest = HttpWebRequest.Create(new Uri(url));
10
//設定登入帳號&密碼
11
oRequest.Credentials = new NetworkCredential(username, pw);
12
WebResponse oResponse = oRequest.GetResponse();
13
14
using (StreamReader sr = new StreamReader(oResponse.GetResponseStream()))
15
{
16
strResult = sr.ReadToEnd();
17
sr.Close();
18
}
19
20 oRequest = null;
21
oResponse = null;
22
}
23
catch (WebException wex)
24
{
25
//例外處理邏輯放這邊
26
}
27
return strResult;
28
}


02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20 oRequest = null;
21

22

23

24

25

26

27

28

第二種方法FtpWebRequest
01
private string DownloadFile(string url, string username, string pw)
02
{
03
string strResult = "";
04
try
05
{
06
//cast成FtpWebRequest類別
07
FtpWebRequest oFtpReq = (FtpWebRequest)WebRequest.Create(new Uri(url));
08
oFtpReq.Method = WebRequestMethods.Ftp.DownloadFile;
09
10
//set the username & password
11
oFtpReq.Credentials = new NetworkCredential(username, pw);
12
13
//因為只是簡單的text檔案,所以不需要用Binary模式
14
oFtpReq.UseBinary = false;
15
16
//如果你曾經得到類似下面的錯誤,則加入此行程式碼。
17
//The remote server returned an error: 227 Entering Passive Mode
18
oFtpReq.UsePassive = false;
19
FtpWebResponse oFtpResp = (FtpWebResponse)oFtpReq.GetResponse();
20
21
using (StreamReader sr = new StreamReader(oFtpResp.GetResponseStream()))
22
{
23
strResult = sr.ReadToEnd();
24
sr.Close();
25
}
26
27
oFtpResp.Close();
28
oFtpReq = null;
29
oFtpResp = null;
30
}
31
catch (WebException wex)
32
{
33
//例外處理邏輯
34
}
35
return strResult;
36
}

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

此種方法支援斷點續傳,MS也是建議用此種方法從FTP下載檔案。
第三種WebClient
01
public string DownloadFile3(string url, string username, string pw)
07
{
08
string strResult = "";
09
try
10
{
11
using (WebClient oWebClient = new WebClient())
12
{
13
oWebClient.Credentials = new NetworkCredential(username, pw);
14
strResult = oWebClient.DownloadString(new Uri(url));
15
}
16
}
17
catch (WebException wex)
18
{
19
//例外處理邏輯
20
}
21
return strResult;
22
}

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

附註:請記得此處只有用一個簡單的純文字檔做範例,如果你要下載的檔案不是純文字檔就要更改相關的設定。如果檔案比較大,最好用byte[]去承接stream。
參考: