2011-01-06 115 views
0

我正在使用c#.net編寫Windows應用程序。 我正在使用FTPwebrequest類上傳ftp.it文件,在應用程序和Internet之間沒有代理時工作正常。但它在代理中不起作用。使用FTP上傳文件的問題

FtpWebRequest reqFTP; 如果我使用reqFTP.Proxy=new webproxy("proxyservername",21); 那麼它會顯示錯誤消息「FTP命令doen't在HTTP代理支持」。

我的代碼是這樣的

FtpWebRequest reqFTP; 
reqFTP = (FtpWebRequest)FtpWebRequest.Create("ftp://uri"); 

reqFTP.Credentials = new NetworkCredential("username", "pwd"); 

reqFTP.KeepAlive = false; 

reqFTP.Method = WebRequestMethods.Ftp.UploadFile; 
reqFTP.UseBinary = true; 
reqFTP.UsePassive = true; 
int buffLength = 2048; 

byte[] buff = new byte[buffLength]; 
int contentLen; 

FileStream fs = fileInf.OpenRead(); 

Stream strm = reqFTP.GetRequestStream(); 

contentLen = fs.Read(buff, 0, buffLength); 

while (contentLen != 0) 
{ 
    strm.Write(buff, 0, contentLen); 
    contentLen = fs.Read(buff, 0, buffLength); 
    prbUpload.Value += contentLen; 
} 

strm.Close(); 
fs.Close(); 

回答

0

您正在使用HTTP代理。可能是你使用這個代理瀏覽互聯網。您不能使用ftp的http代理。要將該代理用於ftp,您需要爲ftp配置代理服務器。

底線是,FTP代理需要FTP,HTTP代理需要瀏覽等。

所以,你要發送的FTP命令通過代理,但代理僅支持HTTP。所以,我覺得現在的錯誤消息是更具實際意義

FTP命令HTTP代理doen't支持

+0

如何以編程方式爲ftp配置代理服務器。 – dhanya 2011-01-06 11:39:32

1

FtpWebRequest.Proxy屬性文件:

如果指定代理是HTTP 代理,只有DownloadFile, ListDirectoryListDirectoryDetails命令是 支持的。

因此,您不能使用FtpWebRequest通過HTTP代理使用FTP上載文件。其他解決方案可能可用,請參閱討論相同問題的this question

0

無論是uploadFile,DownloadFile,ListDirectory還是ListDirectoryDe​​tails,下面的代碼可以解決所有問題。

reqFTP.Proxy = new WebProxy(); 

它將初始化Proxy以清空將在內部跳過代理的WebProxy類的實例。