Добрый день, столкнулся с неведомой мне проблемой.
Есть некий фтп сервер, куда нужно загрузить файл. С помощью ФТП клиента файл загружается нормально. А вот программно совсем не хочет загружаться.
Вот код:
public static void ftpfile(string ftpfilepath, string inputfilepath)
{
var ftpfullpath = "ftp://127.0.0.1/" + ftpfilepath;
var ftp = (FtpWebRequest)WebRequest.Create(ftpfullpath);
ftp.Credentials = new NetworkCredential("user", "password");
ftp.KeepAlive = false;
ftp.UseBinary = true;
ftp.UsePassive = false;
ftp.Method = WebRequestMethods.Ftp.AppendFile;
var fs = File.OpenRead(inputfilepath);
var buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
var ftpstream = ftp.GetRequestStream();
ftpstream.Write(buffer, 0, buffer.Length);
ftpstream.Close();
}
Если ставить
ftp.UsePassive = false;
возникает исключение: Время ожидания истекло.
Если ставить
ftp.UsePassive = true;
возникает исключение: В ответ на команду PASV сервер вернул не тот адрес, с которым было установлено соединение FTP.
В обоих случаях исключение возникает на строке
var ftpstream = ftp.GetRequestStream();
Проблема именно с конкретным ФТП сервером, разрешения на запись для пользователя имеются. На другие ФТП этот код загружает файлы корректно и без ошибок.
Может кто сталкивался с данной проблемой?
Здравствуйте, Аноним, Вы писали:
А>Делаю вот так:
А> string URI = settings.FTPPath + "%2f" + settings.FTPFileName;
А> string login = settings.FTPLogin;
А> string password = settings.FTPPWD;
А> try
А> {
А> using (FileStream fs = new FileStream(Application.StartupPath + "/" + settings.ZipFileName, FileMode.Open))
А> {
А> byte[] buffer = new byte[fs.Length];
А> fs.Read(buffer, 0, (int)fs.Length);
А> this.fileSize = buffer.Length;
А> FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(URI);
А> ftp.Credentials = new NetworkCredential(login, password);
А> ftp.Method = WebRequestMethods.Ftp.UploadFile;
А> ftp.UsePassive = false;
А> ftp.UseBinary = true;
А> Stream requestStream = ftp.GetRequestStream();
А> requestStream.Write(buffer, 0, this.fileSize);
А> requestStream.Close();
А> }
А> return true;
А> }
А> catch (Exception ex)
А> {
А> return false;
А> }
К сожалению возникает исключение:
System.Net.WebException: Время ожидания операции истекло
S>Проблема именно с конкретным ФТП сервером, разрешения на запись для пользователя имеются. На другие ФТП этот код загружает файлы корректно и без ошибок.
Может стоило бы выдать название этого FTP-сервера, раз проблема именно с ним
В коде замечено "127.0.0.1", может проблема в том, что сервер выдает адрес конкретного сетевого интерфейса, а не 127.0.0.1 ? Как вариант — поменять адрес на что-то более конкретное. Ну и сниффером посмотреть (не знаю многие ли умеют слушать loopback, на примете только LTMonitor).