1. Главная
  2. /
  3. Delphi
  4. /
  5. Delphi idFTP пример скачивания файла с ftp

Delphi idFTP пример скачивания файла с ftp

Недавно писал себе программулину, сливающую резервные копии с фтп сервера на локальный тазик, и пришлось сесть подразобраться с Indy компонентом idFTP.
Для начала на форму выкинем кнопку, об зовем ее Download, и компонент idFTP из закладки Indy Clients, должно получиться нечто похожее на постер к посту (см. выше 😉 )
Чтож, полпути пройдено, теперь в обработчике событий для нажатия кнопки пишем следующий код:


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
idFTP.Username:= 'backuper';
idFTP.Password:= 'xxxxxxxxxxxxx';
idFTP.Host:= 'ip_ftp_servera';
idFTP.Passive:= True;
if idFTP.Connected then
begin
idFTP.Disconnect;
try
idFTP.Connect(True);
except
on E : Exception do
ShowMessage('Ошибка подключения: '+E.Message);
end;
if idFTP.Connected then
try
idFTP.Get('test.rar', 'c:/temp/test.rar', True);
except
on E : Exception do
ShowMessage('Ошибка скачивания файла: '+E.Message);
end;
end
else
try
idFTP.Connect(True);
except
on E : Exception do
ShowMessage('Ошибка подключения: '+E.Message);
end;
if idFTP.Connected then
try
idFTP.Get('test.rar', 'c:/temp/test.rar', True);
except
on E : Exception do
ShowMessage('Ошибка скачивания файла: '+E.Message);
end;
end;

В двух словах по коду:
проверяем подключен ли компонент к серверу, если подключен, то отключаем и подключаемся по новой, если не удается подключиться, вылетит сообщение, с описанием ошибки, после пробуем слить файл test.rar, опять же, если что-то не получается, то снова вылетит месага об ошибочке.
Если возникли вопросы по коду, или необходимо просто помочь, буду рад оказать содействие )))))

Поделиться ссылкой на статью

15 комментариев. Оставить новый

  • Сергей
    23.06.2021 14:48

    Перед коннектом нужно обязательно задать следующее:
    TransferType := ftBinary;
    Иначе двоичные файлы будут скачиваться с искажением.

    Ответить
  • Все бы хорошо, о если в имени файла есть кирилица — то не работает. Как быть?

    Ответить
  • У меня Antivir Personal после дополнения этого куска кода сразу выдаёт Троян якобы TR/ATRAPS.Gen и хрен запустишь прогу пока не отрубишь антивир. Опять же, если у пользователя тот же AntiVir стоит будут такие же вилы! Значит надо искать другие варианты обновлений… а то нет универсальности решения. Странно, конечно какого лешего Антивир фигнёй страдает на такой безобидный код, но блин не айс получается в плане реализации закачки.

    Ответить
  • username
    26.09.2013 13:09

    На делфях уже сто лет не кодил 🙂

    Ответить
  • И это лишнее. Вот так надо (Delphi XE5):
    procedure Form1.acReloadExecute(Sender: TObject);
    begin
    idFTP1.Username:= ‘backuper’;
    idFTP1.Password:= ‘xxxxxxxxxxxxx’;
    idFTP1.Host:= ‘ip_ftp_servera’;
    idFTP1.Passive:= True;
    idFtp1.AutoLogin:=True;
    if idFTP1.Connected then idFTP1.Disconnect;
    try
    idFTP1.Connect();
    except
    on E : Exception do
    ShowMessage(‘Ошибка подключения: ‘+E.Message);
    end;
    if idFTP1.Connected then try
    idFTP1.Get(‘test.rar’, ‘c:/temp/test.rar’, True);
    except
    on E : Exception do
    ShowMessage(‘Ошибка скачивания файла: ‘+E.Message);
    end;
    end;

    Ответить
  • username
    08.07.2013 19:56

    вообще, этоn блок можно вынести в отдельную функцию
    try
    idFTP.Connect(True);
    except
    on E : Exception do
    ShowMessage(‘Ошибка подключения: ‘+E.Message);
    end;
    if idFTP.Connected then
    try
    idFTP.Get(‘test.rar’, ‘c:/temp/test.rar’, True);
    except
    on E : Exception do
    ShowMessage(‘Ошибка скачивания файла: ‘+E.Message);
    end;
    и вызывать когда нужно, перепишу потом, главное что суть ясна

    Ответить
  • alexvgrey
    08.07.2013 19:49

    ну смотри: ты выставил все параметры для соединения, потом проверяешь: если соединен — разорвать соединение, иначе скачать файл (со всеми обработками).
    Говоря точнее, надо бы убрать else и один end; в конце. Тогда проверка на соединение отработает и скачивание произойдет. В любом случае спасибо, этот пример взял для работы над своим приложением 🙂

    Ответить
  • username
    08.07.2013 18:40

    Поправил в коде, добавил переподключение, если уже подключены 🙂

    Ответить
  • username
    08.07.2013 18:38

    Немного не так, не сработает при втором жмакании на кнопку, т.к. компонент просто отключится от сервера 🙂
    А при первом жмакании, он проверит, подключены мы или нет к севраку, если подключены, от отключаемся, если нет, то конектимся и выкачиваем то что нас интересует.
    Опять же, это просто пример, возможно немного неудачно я проверкой подключения сделал, но тут уже проверка на гика)))))

    Ответить
  • alexvgrey
    08.07.2013 18:20

    нене, если не убрать этот if, то else не сработает при первом запуске, когда процесс не соединен с сетью.

    Ответить
  • username
    07.07.2013 20:41

    Эм, у каждого свои подходы к программированию, ну убери, и не обрабатывай исключение, если твой компонент уже будет подключен, все в твоих руках))))))

    Ответить
  • alexvgrey
    06.07.2013 20:52

    >idFTP.Disconnect
    >else
    >try
    Я бы это else убрал, без нее действительно будет работать 🙂
    А в конце, для чистоты кода я бы сделал
    idFTP.Disconnect;

    Ответить
  • username
    17.05.2013 08:24

    Перепроверь логин пароль, тебе четко указало ошибку
    ‘Login or password incorrect!’.
    попробуй копипастом в тотале те данные что используешь в проге

    Ответить
  • demon-sheff
    17.05.2013 02:57

    Не работает… Пишет Project Run.exe raised exception class EIdReplyRFCError with message ‘Login or password incorrect!’. Хотя брэндмауэр выключен, антивируса нет, а пользователь есть такой для входа на фтп. с тотала захожу без проблем

    Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Категории

Меню