Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

"Решение проблемы загрузки файлов с удаленного FTP-сервера в Delphi с TIdFTP.Get"

Delphi , Интернет и Сети , FTP

Решение проблемы загрузки файлов с удаленного FTP-сервера в Delphi с TIdFTP.Get

В данной статье мы рассмотрим проблему загрузки файлов с удаленного FTP-сервера в Delphi с использованием компонента TIdFTP.Get. При попытке загрузить файл, TIdFTP выдает ошибку "Can't open : No such file or directory". Мы разберемся, как правильно указать путь к файлу на удаленном сервере, чтобы загрузка прошла успешно.

Описание проблемы

Разработчик пытается загрузить файл ssleay32.dll с удаленного сервера, где у него есть аккаунт, используя TIdFTP.Get (версия 10). Файл существует в папке на сервере, и разработчик может подключиться к серверу с помощью TIdFTP. Однако, независимо от того, как он указывает путь к файлу, TIdFTP.Get выдает ошибку "Can't open : No such file or directory".

Разработчик пытался менять директорию перед загрузкой файла, но также получал ту же ошибку. При подключении к серверу с помощью FileZilla с теми же учетными данными, путь к папке отображается как /MAMbase. Разработчик пытался указать путь к файлу различными способами (/MAMbase, ../MAMbase, ./MAMbase, /MAMbase/, и другие варианты), но без успеха.

Пример кода

Ниже представлен код, который разработчик использует для загрузки файла с удаленного сервера:

if (not fileexists(pathToCommonFiles + 'libeay32.dll')) or (not fileexists(pathToCommonFiles + 'ssleay32.dll')) then
begin
  try
    try
      IdFTP1.Connect;
      IdFTP1.Get('./MAMbase/ssleay32.dll', pathToCommonFiles + 'ssleay32.dll', true);
    except on E: Exception do
      showmessage('Could not make ftp connection for SSL files' + slinebreak +
                  'Exception class name = ' + E.ClassName + slinebreak +
                  'Exception message = ' + E.Message);
    end;
  finally
    IdFTP1.quit;
  end;
end;

Подтвержденное решение

Первое, что нужно сделать, это подготовить локальные имена файлов заранее:

LocalLibeayFile := IncludeTrailingPathDelimiter(pathToCommonFiles) + 'libeay32.dll';
LocalSsleayFile := IncludeTrailingPathDelimiter(pathToCommonFiles) + 'ssleay32.dll';

Или:

LocalLibeayFile := TPath.Combine(pathToCommonFiles, 'libeay32.dll');
LocalSsleayFile := TPath.Combine(pathToCommonFiles, 'ssleay32.dll');

Затем, один из следующих вариантов должен работать:

if (not FileExists(LocalLibeayFile)) or (not FileExists(LocalSsleayFile)) then
begin
  ...
  IdFTP1.ChangeDir('/MAMbase');
  IdFTP1.Get('libeay32.dll', LocalLibeayFile, True);
  IdFTP1.Get('ssleay32.dll', LocalSsleayFile, True);
  ...
end;

Или:

if (not FileExists(LocalLibeayFile)) or (not FileExists(LocalSsleayFile)) then
begin
  ...
  IdFTP1.Get('/MAMbase/libeay32.dll', LocalLibeayFile, True);
  IdFTP1.Get('/MAMbase/ssleay32.dll', LocalSsleayFile, True);
  ...
end;

Если сервер помещает вас в папку / изначально, вы можете опустить ведущий /:

IdFTP1.ChangeDir('MAMbase');
IdFTP1.Get('libeay32.dll', LocalLibeayFile, True);
IdFTP1.Get('ssleay32.dll', LocalSsleayFile, True);

Или:

IdFTP1.Get('MAMbase/libeay32.dll', LocalLibeayFile, True);
IdFTP1.Get('MAMbase/ssleay32.dll', LocalSsleayFile, True);

Если вы все еще получаете ошибку, вам нужно определить, откуда она исходит - с FTP-сервера или с локальной машины. Какой тип исключения фактически вызывается? Если это EIdReplyRFCError, ошибка исходит от FTP-сервера. В противном случае, ошибка исходит с локальной машины.

Альтернативное решение

В качестве альтернативного решения вы можете попробовать изменить директорию на сервере перед загрузкой файла, как показано ниже:

IdFTP1.ChangeDir('ApplicationUpdates/MAMbase');
IdFTP1.Get('libeay32.dll', LocalLibeayFile, True);
IdFTP1.Get('ssleay32.dll', LocalSsleayFile, True);

Обратите внимание, что в данном случае путь к папке на сервере может отличаться от того, что отображается в FileZilla. В зависимости от конфигурации сервера, вам может потребоваться использовать другой путь для изменения директории.

Заключение

В данной статье мы рассмотрели проблему загрузки файлов с удаленного FTP-сервера в Delphi с использованием TIdFTP.Get и предложили решение, которое должно помочь вам успешно загрузить файлы с сервера. Важно правильно указать путь к файлу на сервере и учитывать особенности работы с FTP-сервером.

Создано по материалам из источника по ссылке.

В данной статье рассматривается проблема загрузки файлов с удаленного FTP-сервера в Delphi с использованием компонента TIdFTP.Get и способы её решения. При попытке загрузить файл, TIdFTP выдает ошибку "Can't open : No such file or directory", однако после


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: FTP ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:58:37/0.0038349628448486/0