Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Bandwidth Throttled Asynchronous HTTP Upload

See more Upload Examples

Demonstrates how to do an HTTP upload asynchronously in a background thread with limiting the rate to an approximate number of bytes/second. The only difference between this example and one without bandwidth throttling is that the BandwidthThrottleUp property is set.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Upload;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  upload: TUpload;

begin
  success := False;

  upload := TUpload.Create;

  //  Specify the page (ASP, ASP.NET, Perl, Python, Ruby, CGI, etc)
  //  that will process the HTTP Upload.
  upload.Hostname := 'www.mywebserver.com';
  upload.Path := '/receiveUpload.aspx';

  //  Add one or more files to be uploaded.
  upload.AddFileReference('file1','dude.gif');
  upload.AddFileReference('file2','pigs.xml');
  upload.AddFileReference('file3','sample.doc');

  //  Set the BandwidthThrottleUp property to throttle to approx 64K/second
  upload.BandwidthThrottleUp := 65536;

  //  Begin the HTTP upload in a background thread:
  success := upload.BeginUpload();
  if (success <> True) then
    begin
      WriteLn(upload.LastErrorText);
    end
  else
    begin
      WriteLn('Upload started...');
    end;

  //  Wait for the upload to finish.
  //  Print the progress as we wait...
  while (upload.UploadInProgress = True) do
    begin
      //  We can abort the upload at any point by calling:
      //  upload.AbortUpload();

      //  Display the percentage complete and the number of bytes uploaded so far..
      //  The total upload size will become set after the upload begins:
      WriteLn(upload.PercentUploaded + '% ' + upload.NumBytesSent + '/' + upload.TotalUploadSize);

      //  Sleep 2/10ths of a second.
      upload.SleepMs(200);

    end;

  //  Did the upload succeed?
  if (upload.UploadSuccess = True) then
    begin
      WriteLn('Files uploaded!');
    end
  else
    begin
      WriteLn(upload.LastErrorText);
    end;


  upload.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.