Лекция: Программа получения файлов по 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; // очищаем прогресс-бар

еще рефераты
Еще работы по информатике