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

WordPress Media Upload

See more WordPress Examples

Demonstrates how to upload a media file to WordPress.

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.Http,
  Chilkat.HttpRequest,
  Chilkat.DtObj,
  Chilkat.HttpResponse,
  Chilkat.JsonObject;

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

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  req: THttpRequest;
  resp: THttpResponse;
  jsonResponse: TJsonObject;
  date_gmt: TDtObj;
  href: string;
  embeddable: Boolean;
  name: string;
  templated: Boolean;
  id: Integer;
  date: string;
  guidRendered: string;
  guidRaw: string;
  modified: string;
  modified_gmt: string;
  slug: string;
  status: string;
  v_type: string;
  link: string;
  titleRaw: string;
  titleRendered: string;
  author: Integer;
  comment_status: string;
  ping_status: string;
  template: string;
  permalink_template: string;
  generated_slug: string;
  descriptionRaw: string;
  descriptionRendered: string;
  captionRaw: string;
  captionRendered: string;
  alt_text: string;
  media_type: string;
  mime_type: string;
  media_detailsWidth: Integer;
  media_detailsHeight: Integer;
  media_detailsFile: string;
  media_detailsSizesWoocommerce_gallery_thumbnailFile: string;
  media_detailsSizesWoocommerce_gallery_thumbnailWidth: Integer;
  media_detailsSizesWoocommerce_gallery_thumbnailHeight: Integer;
  media_detailsSizesWoocommerce_gallery_thumbnailMime_type: string;
  media_detailsSizesWoocommerce_gallery_thumbnailSource_url: string;
  media_detailsSizesShop_thumbnailFile: string;
  media_detailsSizesShop_thumbnailWidth: Integer;
  media_detailsSizesShop_thumbnailHeight: Integer;
  media_detailsSizesShop_thumbnailMime_type: string;
  media_detailsSizesShop_thumbnailSource_url: string;
  media_detailsSizesFullFile: string;
  media_detailsSizesFullWidth: Integer;
  media_detailsSizesFullHeight: Integer;
  media_detailsSizesFullMime_type: string;
  media_detailsSizesFullSource_url: string;
  media_detailsImage_metaAperture: string;
  media_detailsImage_metaCredit: string;
  media_detailsImage_metaCamera: string;
  media_detailsImage_metaCaption: string;
  media_detailsImage_metaCreated_timestamp: string;
  media_detailsImage_metaCopyright: string;
  media_detailsImage_metaFocal_length: string;
  media_detailsImage_metaIso: string;
  media_detailsImage_metaShutter_speed: string;
  media_detailsImage_metaTitle: string;
  media_detailsImage_metaOrientation: string;
  post: string;
  source_url: string;
  i: Integer;
  count_i: Integer;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  http := THttp.Create;

  //  This example will use WordPress username / Application password authentication using the "Applications Password" plugin.
  //  See https://wordpress.org/plugins/application-passwords/

  //  Use your WordPress login, such as "admin", not the application name.
  http.Login := 'wp_username';
  //  Use the application password, such as "Nths RwVH eDJ4 weNZ orMN jabq"
  http.Password := 'app_password';
  http.BasicAuth := True;

  req := THttpRequest.Create;
  req.HttpVerb := 'POST';

  //  Use the Content-Type that corresponds to the type of file you are uploading.

  //  WordPress supports uploading the following file types:

  //  Images
  //  
  //      .jpg  (image/jpg)
  //      .jpeg  (image/jpeg)
  //      .png  (image/png)
  //      .gif  (image/gif)
  //      .ico (image/x-icon)
  //  
  //  Documents
  //  
  //      .pdf (applicatin/pdf)
  //      .doc, .docx (application/msword)
  //      .ppt, .pptx, .pps, .ppsx (application/mspowerpoint)
  //      .odt 
  //      .xls, .xlsx (application/msexcel)
  //      .psd (??? image/vnd.adobe.photoshop,application/x-photoshop,application/photoshop,application/psd,image/psd)
  //  
  //  Audio
  //  
  //      .mp3 (audio/mpeg)
  //      .m4a
  //      .ogg
  //      .wav (audio/wav)
  //  
  //  Video
  //  
  //      .mp4, .m4v (video/mp4)
  //      .mov (video/quicktime)
  //      .wmv (video/x-ms-wmv)
  //      .avi (video/avi)
  //      .mpg (video/mpeg)
  //      .ogv 
  //      .3gp 
  //      .3g2 

  req.ContentType := 'image/jpg';
  req.Path := '/wp-json/wp/v2/media';

  success := req.LoadBodyFromFile('qa_data/jpg/starfish.jpg');
  if (success = False) then
    begin
      WriteLn(req.LastErrorText);
      Exit;
    end;

  req.AddHeader('Content-Disposition','attachment; filename=starfish.jpg');

  req.AddHeader('Expect','100-continue');

  resp := THttpResponse.Create;
  success := http.HttpSReq('www.yourserver.com',443,True,req,resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  WriteLn('HTTP response status: ' + resp.StatusCode);

  jsonResponse := TJsonObject.Create;
  jsonResponse.Load(resp.BodyStr);

  jsonResponse.EmitCompact := False;
  WriteLn(jsonResponse.Emit());

  //  Sample JSON response:
  //  (Sample code for parsing the JSON response is shown below)

  //  {
  //    "id": 1915,
  //    "date": "2021-01-19T18:25:01",
  //    "date_gmt": "2021-01-20T01:25:01",
  //    "guid": {
  //      "rendered": "http:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish.jpg",
  //      "raw": "http:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish.jpg"
  //    },
  //    "modified": "2021-01-19T18:25:01",
  //    "modified_gmt": "2021-01-20T01:25:01",
  //    "slug": "starfish",
  //    "status": "inherit",
  //    "type": "attachment",
  //    "link": "https:\/\/cknotes.com\/starfish\/",
  //    "title": {
  //      "raw": "starfish",
  //      "rendered": "starfish"
  //    },
  //    "author": 1,
  //    "comment_status": "closed",
  //    "ping_status": "closed",
  //    "template": "",
  //    "meta": [
  //    ],
  //    "permalink_template": "https:\/\/cknotes.com\/?attachment_id=1915",
  //    "generated_slug": "starfish",
  //    "description": {
  //      "raw": "",
  //      "rendered": "<p class=\"attachment\"><a href='https:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish.jpg'><img width=\"120\" height=\"120\" src=\"https:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish.jpg\" class=\"attachment-medium size-medium\" alt=\"\" loading=\"lazy\" srcset=\"http:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish.jpg 120w, http:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish-100x100.jpg 100w\" sizes=\"(max-width: 120px) 100vw, 120px\" \/><\/a><\/p>\n"
  //    },
  //    "caption": {
  //      "raw": "",
  //      "rendered": ""
  //    },
  //    "alt_text": "",
  //    "media_type": "image",
  //    "mime_type": "image\/jpeg",
  //    "media_details": {
  //      "width": 120,
  //      "height": 120,
  //      "file": "2021\/01\/starfish.jpg",
  //      "sizes": {
  //        "woocommerce_gallery_thumbnail": {
  //          "file": "starfish-100x100.jpg",
  //          "width": 100,
  //          "height": 100,
  //          "mime_type": "image\/jpeg",
  //          "source_url": "https:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish-100x100.jpg"
  //        },
  //        "shop_thumbnail": {
  //          "file": "starfish-100x100.jpg",
  //          "width": 100,
  //          "height": 100,
  //          "mime_type": "image\/jpeg",
  //          "source_url": "https:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish-100x100.jpg"
  //        },
  //        "full": {
  //          "file": "starfish.jpg",
  //          "width": 120,
  //          "height": 120,
  //          "mime_type": "image\/jpeg",
  //          "source_url": "https:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish.jpg"
  //        }
  //      },
  //      "image_meta": {
  //        "aperture": "0",
  //        "credit": "",
  //        "camera": "",
  //        "caption": "",
  //        "created_timestamp": "0",
  //        "copyright": "",
  //        "focal_length": "0",
  //        "iso": "0",
  //        "shutter_speed": "0",
  //        "title": "",
  //        "orientation": "0",
  //        "keywords": [
  //        ]
  //      }
  //    },
  //    "post": null,
  //    "source_url": "https:\/\/cknotes.com\/wp-content\/uploads\/2021\/01\/starfish.jpg",
  //    "missing_image_sizes": [
  //    ],
  //    "_links": {
  //      "self": [
  //        {
  //          "href": "https:\/\/cknotes.com\/wp-json\/wp\/v2\/media\/1915"
  //        }
  //      ],
  //      "collection": [
  //        {
  //          "href": "https:\/\/cknotes.com\/wp-json\/wp\/v2\/media"
  //        }
  //      ],
  //      "about": [
  //        {
  //          "href": "https:\/\/cknotes.com\/wp-json\/wp\/v2\/types\/attachment"
  //        }
  //      ],
  //      "author": [
  //        {
  //          "embeddable": true,
  //          "href": "https:\/\/cknotes.com\/wp-json\/wp\/v2\/users\/1"
  //        }
  //      ],
  //      "replies": [
  //        {
  //          "embeddable": true,
  //          "href": "https:\/\/cknotes.com\/wp-json\/wp\/v2\/comments?post=1915"
  //        }
  //      ],
  //      "wp:action-unfiltered-html": [
  //        {
  //          "href": "https:\/\/cknotes.com\/wp-json\/wp\/v2\/media\/1915"
  //        }
  //      ],
  //      "wp:action-assign-author": [
  //        {
  //          "href": "https:\/\/cknotes.com\/wp-json\/wp\/v2\/media\/1915"
  //        }
  //      ],
  //      "curies": [
  //        {
  //          "name": "wp",
  //          "href": "https:\/\/api.w.org\/{rel}",
  //          "templated": true
  //        }
  //      ]
  //    }
  //  }

  //  Sample code for parsing the JSON response...
  //  Use the following online tool to generate parsing code from sample JSON:
  //  Generate Parsing Code from JSON

  date_gmt := TDtObj.Create;

  id := jsonResponse.IntOf('id');
  date := jsonResponse.StringOf('date');
  jsonResponse.DtOf('date_gmt',False,date_gmt);
  guidRendered := jsonResponse.StringOf('guid.rendered');
  guidRaw := jsonResponse.StringOf('guid.raw');
  modified := jsonResponse.StringOf('modified');
  modified_gmt := jsonResponse.StringOf('modified_gmt');
  slug := jsonResponse.StringOf('slug');
  status := jsonResponse.StringOf('status');
  v_type := jsonResponse.StringOf('type');
  link := jsonResponse.StringOf('link');
  titleRaw := jsonResponse.StringOf('title.raw');
  titleRendered := jsonResponse.StringOf('title.rendered');
  author := jsonResponse.IntOf('author');
  comment_status := jsonResponse.StringOf('comment_status');
  ping_status := jsonResponse.StringOf('ping_status');
  template := jsonResponse.StringOf('template');
  permalink_template := jsonResponse.StringOf('permalink_template');
  generated_slug := jsonResponse.StringOf('generated_slug');
  descriptionRaw := jsonResponse.StringOf('description.raw');
  descriptionRendered := jsonResponse.StringOf('description.rendered');
  captionRaw := jsonResponse.StringOf('caption.raw');
  captionRendered := jsonResponse.StringOf('caption.rendered');
  alt_text := jsonResponse.StringOf('alt_text');
  media_type := jsonResponse.StringOf('media_type');
  mime_type := jsonResponse.StringOf('mime_type');
  media_detailsWidth := jsonResponse.IntOf('media_details.width');
  media_detailsHeight := jsonResponse.IntOf('media_details.height');
  media_detailsFile := jsonResponse.StringOf('media_details.file');
  media_detailsSizesWoocommerce_gallery_thumbnailFile := jsonResponse.StringOf('media_details.sizes.woocommerce_gallery_thumbnail.file');
  media_detailsSizesWoocommerce_gallery_thumbnailWidth := jsonResponse.IntOf('media_details.sizes.woocommerce_gallery_thumbnail.width');
  media_detailsSizesWoocommerce_gallery_thumbnailHeight := jsonResponse.IntOf('media_details.sizes.woocommerce_gallery_thumbnail.height');
  media_detailsSizesWoocommerce_gallery_thumbnailMime_type := jsonResponse.StringOf('media_details.sizes.woocommerce_gallery_thumbnail.mime_type');
  media_detailsSizesWoocommerce_gallery_thumbnailSource_url := jsonResponse.StringOf('media_details.sizes.woocommerce_gallery_thumbnail.source_url');
  media_detailsSizesShop_thumbnailFile := jsonResponse.StringOf('media_details.sizes.shop_thumbnail.file');
  media_detailsSizesShop_thumbnailWidth := jsonResponse.IntOf('media_details.sizes.shop_thumbnail.width');
  media_detailsSizesShop_thumbnailHeight := jsonResponse.IntOf('media_details.sizes.shop_thumbnail.height');
  media_detailsSizesShop_thumbnailMime_type := jsonResponse.StringOf('media_details.sizes.shop_thumbnail.mime_type');
  media_detailsSizesShop_thumbnailSource_url := jsonResponse.StringOf('media_details.sizes.shop_thumbnail.source_url');
  media_detailsSizesFullFile := jsonResponse.StringOf('media_details.sizes.full.file');
  media_detailsSizesFullWidth := jsonResponse.IntOf('media_details.sizes.full.width');
  media_detailsSizesFullHeight := jsonResponse.IntOf('media_details.sizes.full.height');
  media_detailsSizesFullMime_type := jsonResponse.StringOf('media_details.sizes.full.mime_type');
  media_detailsSizesFullSource_url := jsonResponse.StringOf('media_details.sizes.full.source_url');
  media_detailsImage_metaAperture := jsonResponse.StringOf('media_details.image_meta.aperture');
  media_detailsImage_metaCredit := jsonResponse.StringOf('media_details.image_meta.credit');
  media_detailsImage_metaCamera := jsonResponse.StringOf('media_details.image_meta.camera');
  media_detailsImage_metaCaption := jsonResponse.StringOf('media_details.image_meta.caption');
  media_detailsImage_metaCreated_timestamp := jsonResponse.StringOf('media_details.image_meta.created_timestamp');
  media_detailsImage_metaCopyright := jsonResponse.StringOf('media_details.image_meta.copyright');
  media_detailsImage_metaFocal_length := jsonResponse.StringOf('media_details.image_meta.focal_length');
  media_detailsImage_metaIso := jsonResponse.StringOf('media_details.image_meta.iso');
  media_detailsImage_metaShutter_speed := jsonResponse.StringOf('media_details.image_meta.shutter_speed');
  media_detailsImage_metaTitle := jsonResponse.StringOf('media_details.image_meta.title');
  media_detailsImage_metaOrientation := jsonResponse.StringOf('media_details.image_meta.orientation');
  post := jsonResponse.StringOf('post');
  source_url := jsonResponse.StringOf('source_url');
  i := 0;
  count_i := jsonResponse.SizeOfArray('meta');
  while i < count_i do
    begin
      jsonResponse.I := i;
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('media_details.image_meta.keywords');
  while i < count_i do
    begin
      jsonResponse.I := i;
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('missing_image_sizes');
  while i < count_i do
    begin
      jsonResponse.I := i;
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('_links.self');
  while i < count_i do
    begin
      jsonResponse.I := i;
      href := jsonResponse.StringOf('_links.self[i].href');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('_links.collection');
  while i < count_i do
    begin
      jsonResponse.I := i;
      href := jsonResponse.StringOf('_links.collection[i].href');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('_links.about');
  while i < count_i do
    begin
      jsonResponse.I := i;
      href := jsonResponse.StringOf('_links.about[i].href');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('_links.author');
  while i < count_i do
    begin
      jsonResponse.I := i;
      embeddable := jsonResponse.BoolOf('_links.author[i].embeddable');
      href := jsonResponse.StringOf('_links.author[i].href');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('_links.replies');
  while i < count_i do
    begin
      jsonResponse.I := i;
      embeddable := jsonResponse.BoolOf('_links.replies[i].embeddable');
      href := jsonResponse.StringOf('_links.replies[i].href');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('_links.wp:action-unfiltered-html');
  while i < count_i do
    begin
      jsonResponse.I := i;
      href := jsonResponse.StringOf('_links.wp:action-unfiltered-html[i].href');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('_links.wp:action-assign-author');
  while i < count_i do
    begin
      jsonResponse.I := i;
      href := jsonResponse.StringOf('_links.wp:action-assign-author[i].href');
      i := i + 1;
    end;

  i := 0;
  count_i := jsonResponse.SizeOfArray('_links.curies');
  while i < count_i do
    begin
      jsonResponse.I := i;
      name := jsonResponse.StringOf('_links.curies[i].name');
      href := jsonResponse.StringOf('_links.curies[i].href');
      templated := jsonResponse.BoolOf('_links.curies[i].templated');
      i := i + 1;
    end;



  http.Free;
  req.Free;
  resp.Free;
  jsonResponse.Free;
  date_gmt.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.