Synapse i plik w Post

2011-10-14 20:10
NTw
0

Hej. Mam taki problem. Chcę używać synapse zamiast indy, jednak nie potrafię rozgryźć jak w synapse do Post wrzucić plik, tak bym w post mógł przekazać np. .gif do pliku php na serwerze. Znalazłem takie coś ale do indy:

image:=Tidmultipartformdatastream.Create;
image.AddFormField('value1','a');
image.AddFormField('value2','b');
image.AddFile('file',filename,ftype);

Http:=TIdHTTP.Create(nil);
tmpstr:=Http.Post('http://site.com/script.php',image);

Wszystko wygląda fajnie, tylko jak to przełożyć na synapse? Proszę o pomoc :(

Pozostało 580 znaków

2011-10-15 19:42
0

W module httpsend.pas masz funkcję HttpPostFile - zastosuj ją albo przerób sobie jej kod i dostosuj do swoich potrzeb. Więcej nie doradzę, bo postowania pliku używałem tylko raz kiedyś dawno i zadziałało z prostą stroną php której kod był w necie. Niestety żaden kod z tych zabaw testowych mi nie pozostał, bo widocznie nie było mi to aż tak potrzebne.

HttpPostFile(const URL, FieldName, FileName: string;
  const Data: TStream; const ResultData: TStrings): Boolean;
var
  HTTP: THTTPSend;
  Bound, s: string;
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;
    WriteStrToStream(HTTP.Document, s);
    HTTP.Document.CopyFrom(Data, 0);
    s := CRLF + '--' + Bound + '--' + CRLF;
    WriteStrToStream(HTTP.Document, s);
    HTTP.MimeType := 'multipart/form-data; boundary=' + Bound;
    Result := HTTP.HTTPMethod('POST', URL);
    if Result then
      ResultData.LoadFromStream(HTTP.Document);
  finally
    HTTP.Free;
  end;
end;

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0