Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

передача файла в web-форму через HttpCli [D3, D5, WinXP]


RA ©   (2006-07-31 09:30:00) 

1. На сайте есть форма, которая принимает файл. Выглядет она так:
<form method='post' action=' http://some.net/test.php' enctype='multipart/form-data'>
Upload file: <input type="file" name="inupfile" class="input">
<input type="submit" name="btnupload" id="btnupload" value="Upload">
</form>


2. В эту форму нужно передать файл с помощью компонента HttpCli, входящий в ICS.

Принимается всё - от ссылок на теорию до рекомендаций других компонент... :)


RA   (2006-08-02 16:08:00) [1]

Кто ищет тот всегда найдёт. Поэтому сам и отвечу - мож кому пригодится.
Использовал библиотеку Synapse и пример с неё. Пример немного измёнён чтоб можно было передавать параметр param1 через POST вместе с файлом.

function HttpPostFile(const URL, FieldName, FileName: string;
 const Data: TStream; const ResultData: TStrings): Boolean;
const CRLF = #$0D + #$0A;
var HTTP: THTTPSend;
   Bound, s: string;
begin
 Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
 HTTP := THTTPSend.Create;
 try

   //для передачи параметра param1 методом POST
   s := '--' + Bound + CRLF;
   s := s + 'content-disposition: form-data; name="param1"' + CRLF + CRLF;
   s := s + 'Value of param1' + CRLF;

   s := s+'--' + Bound + CRLF;
   s := s + 'content-disposition: form-data; name="' + FieldName + '";';
   s := s + ' filename="' + FileName +'"' + CRLF;
   s := s + 'Content-Type: Application/octet-string' + CRLF + CRLF;
   HTTP.Document.Write(Pointer(s)^, Length(s));
   HTTP.Document.CopyFrom(Data, 0);
   s := CRLF + '--' + Bound + '--' + CRLF;
   HTTP.Document.Write(Pointer(s)^, Length(s));
   HTTP.MimeType := 'multipart/form-data, boundary=' + Bound;

   Result := HTTP.HTTPMethod('POST', URL);
   ResultData.LoadFromStream(HTTP.Document);
 finally
   HTTP.Free;
 end;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо