FTP upload file запрошенная команда FTP не поддерживается при использовании HTTP прокси
может кто-нибудь, пожалуйста, взгляните на код ниже и скажите мне, что я делаю неправильно. Я просто иду по кругу,,, любые указатели очень ценятся
public class FtpWebRequestUtil
{
private static string RemoteHost;
private static string RemoteFtpPath;
public static NetworkCredential Credential = new NetworkCredential();
public FtpWebRequestUtil()
{
}
public FtpWebRequestUtil(string RemoteAddress, string RemotePath, string RemoteUser, string RemotePwd)
{
Credential.UserName = RemoteUser;
Credential.Password = RemotePwd;
RemoteHost = RemoteAddress;
RemoteFtpPath = RemotePath;
}
public string UploadFile(string localFilePath)
{
int startTime = Environment.TickCount;
// Console.WriteLine("Uploading File " + localFilePath);
try
{
FileInfo localFile = new FileInfo(localFilePath); //e.g.: c:Test.txt
byte[] buf = new byte[2048];
int iWork;
string remoteFile = "ftp://" + RemoteHost + "/" + RemoteFtpPath + "/" + localFile.Name;
FtpWebRequest req = (FtpWebRequest) FtpWebRequest.Create(remoteFile);
// req.Proxy =
req.Credentials = Credential;
// FtpWebRequest req = (FtpWe
req.UseBinary = true;
req.KeepAlive = true;
req.Method = WebRequestMethods.Ftp.UploadFile;
StreamWriter myStreamWriter = new StreamWriter(req.GetRequestStream());
myStreamWriter.Write(new StreamReader("TestFiles" + localFile.Name).ReadToEnd());
myStreamWriter.Close();
FtpWebResponse myFtpWebResponse = (FtpWebResponse) req.GetResponse();
Console.WriteLine("Upload File Complete, status: " + myFtpWebResponse.StatusDescription);
myFtpWebResponse.Close();
return "SUCCESS";
}
catch (Exception ex)
{
Console.WriteLine("There was an error connecting to the FTP Server.");
Console.WriteLine(ex.Message);
throw ex;
}
Console.WriteLine("Time taken for downloading file is " + (Environment.TickCount - startTime).ToString());
return "FAILURE";
}
************************ *********************************
FtpWebRequestUtil ftpClient = new FtpWebRequestUtil(FtpUrl, InputFolder, FtpUser, FtpPassword);
try
{
Thread.Sleep(5000);
ftpClient.UploadFile(UploadingFileName);
}
catch (Exception exception)
{
Assert.Fail(exception.Message);
}
finally
{
ftpClient = null;
}
}
}
3 ответов
оказывается, что только RETR
, LIST
и NLST
методы поддерживаются System.Net.FtpWebRequest
когда HTTP
прокси настроен, и не имеет значения, что вы не устанавливаете прокси в своем коде: если HTTP
прокси (не FTP
proxy) настраивается в настройках прокси-сервера системы (т. е.: Internet Options\Connections\LAN setting\Proxy Server\ Use a proxy server for your LAN), то вы получите эту ошибку при попытке загрузить в FTP
сервер.
в обходной путь - использовать IE для изменения системных настроек, чтобы отключить использование HTTP
прокси. Однако, если у вас есть доступ к затронутому коду, решение должно установить Proxy
свойство запроса к null, например:
request.Proxy = null;
исключения сами по себе являются ответом - он не поддерживается. Вероятно, у вас есть HTTP-прокси, который предотвращает прямое подключение к FTP. Согласно документация MS, если указанный прокси-сервер является HTTP-прокси, поддерживаются только команды DownloadFile, ListDirectory и ListDirectoryDetails - поэтому UploadFile не поддерживается.