Блог по программированию в среде Delphi

Поиск по блогу

Есть идея по созданию интересной программы?

Опиши тут и я по возможности постараюсь это реализовать специально для тебя! Без $ ))

пятница, 7 января 2011 г.

Отправка файла Synapse

Код функции по отправке файла
Автор: Eric Paschoalick Chaves

function HttpPostFileForm(const URL, FieldName, FileName: string; const Data: TStream; const FormFields:TStrings; const ResultData:
TStrings): Boolean;
var
  HTTP: THTTPSend;
  Bound, s: AnsiString;//был string, но для России не катит ( ! )
  i:integer;
const
  CRLF=#13#10;
  FIELD_MASK = CRLF + '--%s' + CRLF +'Content-Disposition: form-data; name="%s"' + CRLF + CRLF+'%s';
begin
  Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
  HTTP := THTTPSend.Create;
  try
    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);
    // Include formfield
    for i:=0 to FormFields.Count-1 do
      begin
        S:= Format(FIELD_MASK,[Bound, FormFields.Names[I],FormFields.Values[FormFields.Names[I]]]);
        HTTP.Document.Write(Pointer(S)^, Length(S));
      end;
    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;


Пример использования


procedure TForm1.Button1Click(Sender: TObject);
var Data:TFileStream;
 FormFields:TStrings;
 FileName:String;
begin
 FileName:='/home/theo/test.zip';

 Data:=TFileStream.Create(FileName, fmOpenRead);

 FormFields:=TStringList.Create;
 FormFields.Add('Feld2=testen');
 FormFields.Add('Feld3=sie mit');

 HttpPostFileForm('http://localhost/theohome/php/listpost.php',
  'Feld1',
  ExtractFileName(FileName),
  Data,
  FormFields,
  Memo1.lines);

 Data.Free;
 FormFields.free;
end;

Возможно кому нибудь пригодиться

2 комментария:

  1. Большое спасибо, очень помогло.
    Увидеть бы по больше Ваших функций =)

    ОтветитьУдалить
    Ответы
    1. Спасибо!
      Больше? так вам сюда
      http://www.webdelphi.ru/synapse/

      Удалить