Программа получения файлов по HTTP и FTP протоколам

1.Разместите на форме три компонента Метка (Label1, Label2, Label3).

2.Измените свойство первой метки Caption на "Адрес файла: ". Для второй метки свойство Caption измените на "Сохранить файл в: ". Для третьей метке очистите значение Caption, здесь будут выдаваться сообщения по ходу загрузки.

3.Добавьте два компонента Edit1 и Edit 2. Первый разместите напротив первой метки справа (это будет для ввода адреса), второй - напротив второй метки справа. У обоих сотрите текст в свойствах Text.

4.Разместите на форме две кнопки (Button1, Button2), для первой в свойстве Caption введите слово "Загрузить файл", для второй - "Закрыть".

5.Откройте закладку Internet (для Delphi 4) или FastNet (для Delphi 5) палитры компонентов. Поместите на форму компоненты NMFTP и NMHTTP.

6.Для кнопки Button2 в окне инспектора объектов для события OnClick напишите следующую процедуру:

procedure TForm1.Button2Click(Sender: TObject);

begin

NMFTP1.Disconnect; // разрыв связи по FTP, если она установлена

NMHTTP1.Disconnect; // разрыв связи по HTTP, если она установлена

Close; // Закрываем программу

end;

7. Для события OnChange компонента Edit1 для проверки заполнения всех полей напишите следующую процедуру:

procedure TForm1.Edit1Change(Sender: TObject);

begin

Edit1.Tag:= 1; // присвоить тагу Edit1 значение 1

end;

Аналогичную операцию необходимо проделать и для Edit2.

8. Для кнопки Button2 создайте обработчик события OnClick:

procedure TForm1.Button1Click(Sender: TObject);

begin

Label3.Caption:= ''; // очиcтка метки для сообщений

if (Edit1.Tag = 1) and (Edit2.Tag = 1) and (Edit1.Text <> '')

and (Edit2.Text <> '') then // проверка данных

begin

// данные введены, выполнять действия

end

else Label3.Caption:= 'Введите все данные!' // введены не все данные

end;

9. Для проверки типа протокола необходимо из оригинального адреса определить начальные буквы адреса (FTP или HTTP):

procedure TForm1.Button1Click(Sender: TObject);

var

serv, addr, host, dir: String;

begin

Label3.Caption:= ''; // очищаем метку для сообщений

if (Edit1.Tag =1) and (Edit2.Tag =1) and (Edit1.Text <> '')

and (Edit2.Text <> '') then // проверка данных

begin // данные введены, выполнять действия

addr:= Edit1.Text; // сохраняем адрес в переменную

serv:= Copy(addr, 1, 6);//копируем 6 символов из

// адреса в переменную serv

if serv = 'ftp://' then // впереди ftp://

begin

// загрузка по FTP

end

else

if serv = 'http:/' then // впереди http:/

begin

// загрузка по HTTP

end

else Label3.Caption:= 'Неправильный адрес';

end else Label3.Caption:='Не все данные'//не все данные

end;

10. При получении данных по выбранному протоколу необходимо сначала соединиться с хостом (сервером), а уже потом записывать файл. Для этого нужно разбить адрес на хост и собственно адрес файла:

procedure TForm1.Button1Click(Sender: TObject);

begin

Label3.Caption:= ''; // очищаем метку для сообщений

if (Edit1.Tag = 1) and (Edit2.Tag =1) and (Edit1.Text <> '')

and (Edit2.Text <> '') then // проверка данных

begin // данные введены, выполнять действия

addr:= Edit1.Text; // сохраняем адрес в переменную

serv:= Copy(addr, 1, 6); // копируем 6 символов из

// адреса в переменную serv

if serv = 'ftp://' then // впереди ftp://

begin

Delete(addr, 1, 6); // удаляем первые 6 символов из

//адреса

host:= Copy (addr, 1, (Pos('/', addr) - 1));

// находим хост

Delete(addr, 1, (Pos('/', addr) - 1));

dir:= addr;

// находим путь к файлу

// загрузка по FTP

end

else

if serv = 'http:/' then // впереди http:/

begin

// загрузка по HTTP

11. Дополните процедуру для записи файла по FTP протоколу вместо строки

«// загрузка по FTP»:

Edit1.Enabled:= false; // выключение кнопки Edit1

Edit2.Enabled:= false; // выключение кнопки Edit2

Button1.Enabled:= false; // выключение кнопки Button1

NMFTP1.Host:= host;

NMFTP1.UserID:= 'anonymous';

NMFTP1.Password:= '';

Label3.Caption:= 'Подключаемся... ';

NMFTP1.Connect;

NMFTP1.Mode(MODE_IMAGE);

Label3.Caption:= 'Запись файла...';

NMFTP1.Download(dir, Edit2.Text);

Label3.Caption:= 'Запись произведена успешно';

Label3.Caption:= 'Отключение';

NMFTP1.Disconnect;

Button1.Enabled:= true; // включение кнопки Button1

Edit1.Enabled:= true;

Edit2.Enabled:= true; // включение Edit1, Edit2

Edit1.Clear;

Edit2.Clear;

12. Добавьте несколько комментариев:

Выделите компонент NMFTF1 у себя на форме, затем для события OnConnect введите:

procedure TForm1.NMFTP1Connect(Sender: TObject);

begin

Label3.Caption:= 'Подключено успешно!!!';

end;

Данная процедура в случае успешного соединения выдаст в метку сообщение.

Для события OnConnectionFailed:

Procedure TForm1.NMFTP1ConnectionFailed(Sender: TObject);

begin

Label3.Caption:= 'Ошибка!!! Не могу соединиться!';

end;

13. Для записи файлов по HTTP протоколу вместо строки «// загрузка по HTTP» введите следующий код:

Edit1.Enabled:= false;

Edit2.Enabled:= false;

Button1.Enabled:= false;

Label3.Caption:= 'Подключаемся... ';

Delete(addr, 1, 7);

NMHTTP1.InputFileMode:= true;

NMHTTP1.Body:= Edit2.Text;

NMHTTP1.Get(addr); // загрузка

Button1.Enabled:= true;

Edit1.Enabled:= true;

Edit2.Enabled:= true;

Edit1.Clear;

Edit2.Clear;

14. Процесс получения данных необходимо оснастить индикатором загрузки. Для этого разместите на форме компонент ProgressBar. Выделите компонент NMFTP1 и откройте в Object Inspector закладку Events. Для события OnPacketRcvd создайте обработчик:

procedure TForm1.NMFTP1PacketRecvd(Sender: TObject);

begin

ProgressBar1.Position:= Round(NMFTP1.BytesRecvd* 100/NMFTP1.BytesTotal);

Label3.Caption:='Получено'+IntToStr(NMFTP1.BytesRecvd) + ' байт из ' + IntToStr (NMFTP1.BytesTotal);

end;

Все эти действия необходимо повторить и для NMHTTP1, только NMFTP1 в коде замените на NMHTTP1.

15. После завершения загрузки очистите ProgressBar - для этого в конце FTP и HTTP фрагментов допишите следующую строку:

ProgressBar1.Position:= 0; // очищаем прогресс-бар


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: