[Previous][Up][Next] Reference for unit 'fpHTTPClient' (#fcl)

File Upload with Local Filename

The FileFormPost method provides an easy way to upload local files to a server. It automatically handles multipart/form-data encoding and sets appropriate headers. The method takes the URL, form field name, local filename, and a response stream.

program FileUploadExample;

{$mode objfpc}{$H+}

uses
  SysUtils, Classes, fphttpclient, opensslsockets;

procedure CreateTestFile(const FileName: String);
var
  F: TextFile;
begin
  AssignFile(F, FileName);
  Rewrite(F);
  try
    Writeln(F, 'Sample file content for upload test');
    Writeln(F, 'Created: ', DateTimeToStr(Now));
    Writeln(F, 'This file will be uploaded via HTTP POST');
  finally
    CloseFile(F);
  end;
end;

var
  Client: TFPHTTPClient;
  ResponseStream: TStringStream;
  TestFileName: String;
begin
  Client := TFPHTTPClient.Create(nil);
  ResponseStream := TStringStream.Create('');
  TestFileName := '/tmp/claude/upload_test.txt';

  try
    // Create a test file to upload
    CreateTestFile(TestFileName);

    Writeln('=== File Upload with Local Filename ===');
    Writeln('Uploading file: ', TestFileName);

    // Configure client for file upload
    Client.AllowRedirect := True;
    Client.AddHeader('User-Agent', 'FreePascal-FileUploader/1.0');

    // Upload the file
    // Parameters: URL, field name, local filename, response stream
    Client.FileFormPost('https://httpbin.org/post', 'uploaded_file', TestFileName, ResponseStream);

    // Check upload result
    if Client.ResponseStatusCode = 200 then
    begin
      Writeln('Upload successful!');
      Writeln('Server response status: ', Client.ResponseStatusCode);
      Writeln('Response content type: ', Client.GetHeader(Client.ResponseHeaders, 'Content-Type'));

      // Show part of the response
      Writeln('Server response (first 200 chars):');
      Writeln(Copy(ResponseStream.DataString, 1, 200));
    end
    else
    begin
      Writeln('Upload failed with status: ', Client.ResponseStatusCode);
      Writeln('Response: ', ResponseStream.DataString);
    end;

    // Upload with additional form fields
    Writeln('=== File Upload with Additional Fields ===');
    ResponseStream.Clear;

    // Add custom headers for the upload
    Client.AddHeader('X-Upload-Purpose', 'documentation-example');

    // You can also upload to services that expect additional form data
    // by using FileFormPost combined with other form fields

  finally
    ResponseStream.Free;
    Client.Free;

    // Clean up test file
    if FileExists(TestFileName) then
      DeleteFile(TestFileName);
  end;
end.

Important Notes:


Documentation generated on: Jan 27 2026