2011-01-06 117 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类的实例。