使用FTP上传文件时出现问题

时间:2011-01-06 11:10:22

标签: c# file-upload

我正在使用c#.net处理Windows应用程序。 我在FTP上使用FTPwebrequest类上传文件。当应用程序和互联网之间没有代理时,工作正常。但它在代理中不起作用。

FtpWebRequest reqFTP; 如果我使用reqFTP.Proxy=new webproxy("proxyservername",21); 然后它将显示错误消息“FTP命令在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();

3 个答案:

答案 0 :(得分:1)

来自FtpWebRequest.Proxy属性文档:

  

如果指定的代理是HTTP   代理,只有DownloadFile,   ListDirectory,和   ListDirectoryDetails命令是   支撑。

因此,您无法使用FtpWebRequest通过HTTP代理使用FTP上传文件。可能还有其他解决方案,请参阅讨论相同问题的this question

答案 1 :(得分:0)

您正在使用HTTP代理。可能是您使用此代理浏览互联网。您不能将http代理用于ftp。要将该代理用于ftp,您需要为ftp配置代理服务器。

底线是,ftp需要ftp代理,浏览时需要http代理等。

因此,您通过代理发送ftp命令,但该代理仅支持http。所以,我认为错误信息现在对您更有意义

FTP命令不支持 HTTP代理

答案 2 :(得分:0)

无论是uploadFile,DownloadFile,ListDirectory还是ListDirectoryDe​​tails,以下代码都可以解决所有问题。

reqFTP.Proxy = new WebProxy();

它会将Proxy初始化为WebProxy Class的空实例,该实例将在内部跳过代理。