Sample code for 30+ languages & platforms
PureBasic

WordPress Media Upload

See more WordPress Examples

Demonstrates how to upload a media file to WordPress.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpRequest.pb"
IncludeFile "CkDtObj.pb"

Procedure ChilkatExample()

    success.i = 0

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

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; 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.
    CkHttp::setCkLogin(http, "wp_username")
    ; Use the application password, such as "Nths RwVH eDJ4 weNZ orMN jabq"
    CkHttp::setCkPassword(http, "app_password")
    CkHttp::setCkBasicAuth(http, 1)

    req.i = CkHttpRequest::ckCreate()
    If req.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttpRequest::setCkHttpVerb(req, "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 

    CkHttpRequest::setCkContentType(req, "image/jpg")
    CkHttpRequest::setCkPath(req, "/wp-json/wp/v2/media")

    success = CkHttpRequest::ckLoadBodyFromFile(req,"qa_data/jpg/starfish.jpg")
    If success = 0
        Debug CkHttpRequest::ckLastErrorText(req)
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        ProcedureReturn
    EndIf

    CkHttpRequest::ckAddHeader(req,"Content-Disposition","attachment; filename=starfish.jpg")

    CkHttpRequest::ckAddHeader(req,"Expect","100-continue")

    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpSReq(http,"www.yourserver.com",443,1,req,resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    Debug "HTTP response status: " + Str(CkHttpResponse::ckStatusCode(resp))

    jsonResponse.i = CkJsonObject::ckCreate()
    If jsonResponse.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoad(jsonResponse,CkHttpResponse::ckBodyStr(resp))

    CkJsonObject::setCkEmitCompact(jsonResponse, 0)
    Debug CkJsonObject::ckEmit(jsonResponse)

    ; 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.i = CkDtObj::ckCreate()
    If date_gmt.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    href.s
    embeddable.i
    name.s
    templated.i

    id.i = CkJsonObject::ckIntOf(jsonResponse,"id")
    date.s = CkJsonObject::ckStringOf(jsonResponse,"date")
    CkJsonObject::ckDtOf(jsonResponse,"date_gmt",0,date_gmt)
    guidRendered.s = CkJsonObject::ckStringOf(jsonResponse,"guid.rendered")
    guidRaw.s = CkJsonObject::ckStringOf(jsonResponse,"guid.raw")
    modified.s = CkJsonObject::ckStringOf(jsonResponse,"modified")
    modified_gmt.s = CkJsonObject::ckStringOf(jsonResponse,"modified_gmt")
    slug.s = CkJsonObject::ckStringOf(jsonResponse,"slug")
    status.s = CkJsonObject::ckStringOf(jsonResponse,"status")
    v_type.s = CkJsonObject::ckStringOf(jsonResponse,"type")
    link.s = CkJsonObject::ckStringOf(jsonResponse,"link")
    titleRaw.s = CkJsonObject::ckStringOf(jsonResponse,"title.raw")
    titleRendered.s = CkJsonObject::ckStringOf(jsonResponse,"title.rendered")
    author.i = CkJsonObject::ckIntOf(jsonResponse,"author")
    comment_status.s = CkJsonObject::ckStringOf(jsonResponse,"comment_status")
    ping_status.s = CkJsonObject::ckStringOf(jsonResponse,"ping_status")
    template.s = CkJsonObject::ckStringOf(jsonResponse,"template")
    permalink_template.s = CkJsonObject::ckStringOf(jsonResponse,"permalink_template")
    generated_slug.s = CkJsonObject::ckStringOf(jsonResponse,"generated_slug")
    descriptionRaw.s = CkJsonObject::ckStringOf(jsonResponse,"description.raw")
    descriptionRendered.s = CkJsonObject::ckStringOf(jsonResponse,"description.rendered")
    captionRaw.s = CkJsonObject::ckStringOf(jsonResponse,"caption.raw")
    captionRendered.s = CkJsonObject::ckStringOf(jsonResponse,"caption.rendered")
    alt_text.s = CkJsonObject::ckStringOf(jsonResponse,"alt_text")
    media_type.s = CkJsonObject::ckStringOf(jsonResponse,"media_type")
    mime_type.s = CkJsonObject::ckStringOf(jsonResponse,"mime_type")
    media_detailsWidth.i = CkJsonObject::ckIntOf(jsonResponse,"media_details.width")
    media_detailsHeight.i = CkJsonObject::ckIntOf(jsonResponse,"media_details.height")
    media_detailsFile.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.file")
    media_detailsSizesWoocommerce_gallery_thumbnailFile.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.sizes.woocommerce_gallery_thumbnail.file")
    media_detailsSizesWoocommerce_gallery_thumbnailWidth.i = CkJsonObject::ckIntOf(jsonResponse,"media_details.sizes.woocommerce_gallery_thumbnail.width")
    media_detailsSizesWoocommerce_gallery_thumbnailHeight.i = CkJsonObject::ckIntOf(jsonResponse,"media_details.sizes.woocommerce_gallery_thumbnail.height")
    media_detailsSizesWoocommerce_gallery_thumbnailMime_type.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.sizes.woocommerce_gallery_thumbnail.mime_type")
    media_detailsSizesWoocommerce_gallery_thumbnailSource_url.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.sizes.woocommerce_gallery_thumbnail.source_url")
    media_detailsSizesShop_thumbnailFile.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.sizes.shop_thumbnail.file")
    media_detailsSizesShop_thumbnailWidth.i = CkJsonObject::ckIntOf(jsonResponse,"media_details.sizes.shop_thumbnail.width")
    media_detailsSizesShop_thumbnailHeight.i = CkJsonObject::ckIntOf(jsonResponse,"media_details.sizes.shop_thumbnail.height")
    media_detailsSizesShop_thumbnailMime_type.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.sizes.shop_thumbnail.mime_type")
    media_detailsSizesShop_thumbnailSource_url.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.sizes.shop_thumbnail.source_url")
    media_detailsSizesFullFile.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.sizes.full.file")
    media_detailsSizesFullWidth.i = CkJsonObject::ckIntOf(jsonResponse,"media_details.sizes.full.width")
    media_detailsSizesFullHeight.i = CkJsonObject::ckIntOf(jsonResponse,"media_details.sizes.full.height")
    media_detailsSizesFullMime_type.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.sizes.full.mime_type")
    media_detailsSizesFullSource_url.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.sizes.full.source_url")
    media_detailsImage_metaAperture.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.aperture")
    media_detailsImage_metaCredit.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.credit")
    media_detailsImage_metaCamera.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.camera")
    media_detailsImage_metaCaption.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.caption")
    media_detailsImage_metaCreated_timestamp.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.created_timestamp")
    media_detailsImage_metaCopyright.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.copyright")
    media_detailsImage_metaFocal_length.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.focal_length")
    media_detailsImage_metaIso.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.iso")
    media_detailsImage_metaShutter_speed.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.shutter_speed")
    media_detailsImage_metaTitle.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.title")
    media_detailsImage_metaOrientation.s = CkJsonObject::ckStringOf(jsonResponse,"media_details.image_meta.orientation")
    post.s = CkJsonObject::ckStringOf(jsonResponse,"post")
    source_url.s = CkJsonObject::ckStringOf(jsonResponse,"source_url")
    i.i = 0
    count_i.i = CkJsonObject::ckSizeOfArray(jsonResponse,"meta")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"media_details.image_meta.keywords")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"missing_image_sizes")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"_links.self")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        href = CkJsonObject::ckStringOf(jsonResponse,"_links.self[i].href")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"_links.collection")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        href = CkJsonObject::ckStringOf(jsonResponse,"_links.collection[i].href")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"_links.about")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        href = CkJsonObject::ckStringOf(jsonResponse,"_links.about[i].href")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"_links.author")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        embeddable = CkJsonObject::ckBoolOf(jsonResponse,"_links.author[i].embeddable")
        href = CkJsonObject::ckStringOf(jsonResponse,"_links.author[i].href")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"_links.replies")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        embeddable = CkJsonObject::ckBoolOf(jsonResponse,"_links.replies[i].embeddable")
        href = CkJsonObject::ckStringOf(jsonResponse,"_links.replies[i].href")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"_links.wp:action-unfiltered-html")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        href = CkJsonObject::ckStringOf(jsonResponse,"_links.wp:action-unfiltered-html[i].href")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"_links.wp:action-assign-author")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        href = CkJsonObject::ckStringOf(jsonResponse,"_links.wp:action-assign-author[i].href")
        i = i + 1
    Wend
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(jsonResponse,"_links.curies")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        name = CkJsonObject::ckStringOf(jsonResponse,"_links.curies[i].name")
        href = CkJsonObject::ckStringOf(jsonResponse,"_links.curies[i].href")
        templated = CkJsonObject::ckBoolOf(jsonResponse,"_links.curies[i].templated")
        i = i + 1
    Wend


    CkHttp::ckDispose(http)
    CkHttpRequest::ckDispose(req)
    CkHttpResponse::ckDispose(resp)
    CkJsonObject::ckDispose(jsonResponse)
    CkDtObj::ckDispose(date_gmt)


    ProcedureReturn
EndProcedure