* * *

Author Topic: how to do a file upload with synapse to a url?  (Read 2101 times)

billyb123

  • New member
  • *
  • Posts: 26
how to do a file upload with synapse to a url?
« on: February 14, 2018, 03:34:40 am »
so I need to upload a file using synapse. I also need to add certain headers to my http post request.
It seems my brain has melted,  I know about HttpPostFile, but I cant add headers to that method?
Basically, my question is (1) how to add headers to HttpPostFile method? or (2) is there a synapse way to simply add file upload to httpmethod method?

Sorry if its a silly question, its 3AM here, my brain has stopped working hours ago.


Code: [Select]
{$mode delphi}

uses sysutils, strutils, httpsend, classes, ssl_openssl, synautil;

var
  http: thttpsend;

begin
  http := thttpsend.create;
  http.headers.add('SOME AUTH HEADER');
  http.headers.add('ANOTHER AUTH HEADER');
  http.headers.add('Content-Type: application/octet-string');
  (* is there a way to simply "add file to upload" without manually editing http request? *)
  http.free;
end.

Thaddy

  • Hero Member
  • *****
  • Posts: 7140
Re: how to do a file upload with synapse to a url?
« Reply #1 on: February 14, 2018, 09:05:26 am »
http://synapse.ararat.cz/doc/help/
Look at HttpPostBinary or HttpPostFile
That may be just what you need.
inline variables like in D10.3 are a bit like Brexit: if you are given the wrong information it sounds like a good idea. Every kid loves candy, but it makes you fat and your teeth will disappear.

Leledumbo

  • Hero Member
  • *****
  • Posts: 7971
  • Programming + Glam Metal + Tae Kwon Do = Me
Re: how to do a file upload with synapse to a url?
« Reply #2 on: February 15, 2018, 06:16:05 pm »
Looking at THTTPSend documentation, it only provides generic Document property, no easy file upload mechanism, you must build the body manually. If you must use Synapse, I don't think you have any other choice.

rvk

  • Hero Member
  • *****
  • Posts: 3467
Re: how to do a file upload with synapse to a url?
« Reply #3 on: February 15, 2018, 06:27:42 pm »
Looking at THTTPSend documentation, it only provides generic Document property, no easy file upload mechanism, you must build the body manually. If you must use Synapse, I don't think you have any other choice.
Like Thaddy already mentioned, there are functions HttpPostFile() and HttpPostBinary() which already do that work. So there is no need to build the body manually.

The only thing is, if you want to add headers you need to copy that function and do the adding yourself. But that's just a copy/paste and adding a line like:
Code: Pascal  [Select]
  1. HTTP.Headers.Add('Header: content');

For example, this is the HttpPostFile of Synapse of which you can make a copy:
Code: Pascal  [Select]
  1. function HttpPostFile(const URL, FieldName, FileName: string;
  2.   const Data: TStream; const ResultData: TStrings): Boolean;
  3. var
  4.   HTTP: THTTPSend;
  5.   Bound, s: string;
  6. begin
  7.   Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
  8.   HTTP := THTTPSend.Create;
  9.   try
  10.     s := '--' + Bound + CRLF;
  11.     s := s + 'content-disposition: form-data; name="' + FieldName + '";';
  12.     s := s + ' filename="' + FileName +'"' + CRLF;
  13.     s := s + 'Content-Type: Application/octet-string' + CRLF + CRLF;
  14.     WriteStrToStream(HTTP.Document, s);
  15.     HTTP.Document.CopyFrom(Data, 0);
  16.     s := CRLF + '--' + Bound + '--' + CRLF;
  17.     WriteStrToStream(HTTP.Document, s);
  18.     HTTP.MimeType := 'multipart/form-data; boundary=' + Bound;
  19.     HTTP.Headers.Add('Header: content');
  20.     Result := HTTP.HTTPMethod('POST', URL);
  21.     if Result then
  22.       ResultData.LoadFromStream(HTTP.Document);
  23.   finally
  24.     HTTP.Free;
  25.   end;
  26. end;
So adding a header in there shouldn't be that difficult (I highlighted the line).

billyb123

  • New member
  • *
  • Posts: 26
Re: how to do a file upload with synapse to a url?
« Reply #4 on: February 19, 2018, 05:41:06 pm »
thanks guys

 

Recent

Get Lazarus at SourceForge.net. Fast, secure and Free Open Source software downloads Open Hub project report for Lazarus