Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование лекции.doc
Скачиваний:
49
Добавлен:
12.11.2019
Размер:
5.53 Mб
Скачать

35.1. Работа с протоколом ftp

Первая задача может решаться «в лоб» - записью в текстовый файл последовательности команд (тэгов) языка разметки HTML. Передачу же файлов для публикации в Интернете проще всего делать по протоколу передачи файлов FTP (File Transfer Protocol). Для работы по протоколу FTP предназначен компонент NMFTP TMLзыка разметки овый файл последовательности пьютера.0000000000000000000000000000000000000000000000000000000000000000000000000, находящийся на закладке FastNet палитры компонентов.

Для передачи файла на Web-сервер по протоколу FTP необходимо знать:

- имя пользователя (login);

- пароль;

- имя каталога на сервере, в который будет помещен файл.

Все эти сведения можно получить у Интернет-провайдера.

Научимся программно передавать файл в Интернет. Разместим на форме компонент с именем FTP типа NMFTP, а также поля ввода для логина, пароля и каталога и список отправляемых файлов (Рис. 35 .133).

Рис. 35.133 Форма для отправки файлов.

Сначала зададим начальные установки: имя сервера, логин и пароль, и попробуем установить соединение:

WITH FTP DO

BEGIN

// имя сервера

Host:=Trim(LabeledEdit1.Text);

// логин

UserID:=Trim(LabeledEdit2.Text);

// пароль

Password:=Trim(LabeledEdit3.Text);

TRY

Connect

except

MessageDlg('Ошибка при соединении с сервером', mtError,[mbOK],0);

exit

end

end;

В случае успеха можно начинать передачу. Создадим для этого отдельную процедуру:

PROCEDURE FTPSendFile(fn:STRING; dir:STRING);

// fn – имя отправляемого файла

// dir – каталог на сервере

VAR i,deep:BYTE;

FUNCTION FTPChangeDir(VAR f:TNMFTP;s:STRING):BYTE;

VAR p:BYTE;

cur:STRING;

BEGIN

Result:=1;

WHILE (s<>'') DO

BEGIN

p:=POS('\',s);

IF p>0 THEN

BEGIN

INC(Result);

cur:=COPY(s,1,p-1);

s:=COPY(s,p+1,LENGTH(s))

END

ELSE

BEGIN

cur:=s;

s:=''

END;

f.ChangeDir(cur);

END

END;

BEGIN

TRY

WITH form1.FTP DO

BEGIN

deep:=FTPChangeDir(form1.FTP,Trim(dir));

Upload(Trim(fn),ExtractFileName(Trim(fn)));

FOR i:=1 TO deep DO

ChangeDir('..')

END

EXCEPT

MessageDlg('Ошибка при передаче файла', mtError,[mbOK],0)

END

END;

35.2. Передача файлов по ftp

Основной метод, обеспечивающий собственно передачу файла – Upload(локальное_имя_файла, имя_файла_на_сервере). Например:

FTP.Upload(‘C:\1.htm’,’1.htm’)

Так как в подавляющем большинстве случаев имя файла на сервере совпадает с локальным (нечего создавать лишнюю путаницу), то в рассматриваемом примере этот метод вызывается следующим образом:

Upload(Trim(fn),ExtractFileName(Trim(fn)));

А в какой каталог на сервере попадет файл? Для смены текущего каталога, в который записываются файлы, предназначен метод ChangeDir(имя_каталога). У него есть одна неприятная особенность: смена каталогов может производиться только пошагово, по одному каталогу за шаг. Например, чтобы перейти в каталог public_html/win/main, необходимо вызвать метод ChangeDir трижды:

FTP. ChangeDir(‘public_html’);

FTP. ChangeDir(‘win’);

FTP. ChangeDir(‘main’);

После выполнения данного метода указанный каталог остается текущим. Чтобы не запутаться при передаче файла в произвольный каталог, в программе использована функция

FTPChangeDir(VAR f:TNMFTP;s:STRING):BYTE;

На вход ей подается ссылка на компонент типа NMFTP и текстовая строка – имя каталога (вида public_html/win/main), а возвращает она число потребовавшихся вызовов метода ChangeDir. В функции переданная текстовая строка разделяется по символам-разделителям “\” и для каждого выделенного названия каталога выполняется метод ChangeDir. Возвращаемое же значение запоминается в переменную deep. Зачем? Чтобы при передаче следующего файла снова оказаться в исходной точке – корневом каталоге сервера. Для этого надо выполнить команду «перейди в каталог более высокого уровня» столько раз, сколько раз был выполнен метод ChangeDir. Для этого используется цикл:

FOR i:=1 TO deep DO

ChangeDir('..')