Загрузка файла на FTP
От: serber  
Дата: 08.10.10 08:17
Оценка:
Добрый день, столкнулся с неведомой мне проблемой.

Есть некий фтп сервер, куда нужно загрузить файл. С помощью ФТП клиента файл загружается нормально. А вот программно совсем не хочет загружаться.

Вот код:

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();



Проблема именно с конкретным ФТП сервером, разрешения на запись для пользователя имеются. На другие ФТП этот код загружает файлы корректно и без ошибок.

Может кто сталкивался с данной проблемой?
ftp .net
Re: Загрузка файла на FTP
От: Аноним  
Дата: 08.10.10 08:29
Оценка:
Делаю вот так:

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;
}
Re[2]: Загрузка файла на FTP
От: serber  
Дата: 08.10.10 10:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Делаю вот так:


А> 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: Время ожидания операции истекло
Re: Загрузка файла на FTP
От: std.denis Россия  
Дата: 12.10.10 08:31
Оценка:
S>Проблема именно с конкретным ФТП сервером, разрешения на запись для пользователя имеются. На другие ФТП этот код загружает файлы корректно и без ошибок.
Может стоило бы выдать название этого FTP-сервера, раз проблема именно с ним
В коде замечено "127.0.0.1", может проблема в том, что сервер выдает адрес конкретного сетевого интерфейса, а не 127.0.0.1 ? Как вариант — поменять адрес на что-то более конкретное. Ну и сниффером посмотреть (не знаю многие ли умеют слушать loopback, на примете только LTMonitor).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.