Sample code for 30+ languages & platforms
DataFlex

Upload File to Google Cloud Storage

See more Google Cloud Storage Examples

Demonstrates how to upload a file to Google Cloud Storage.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoJsonToken
    Handle hoHttp
    Handle hoSbPath
    Integer iNumReplaced
    Variant vReq
    Handle hoReq
    Variant vResp
    Handle hoResp
    Integer iResponseCode
    String sTemp1

    Move False To iSuccess

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

    // This example uses a previously obtained access token having permission for the 
    // scope "https://www.googleapis.com/auth/cloud-platform"

    Get Create (RefClass(cComChilkatJsonObject)) To hoJsonToken
    If (Not(IsComObjectCreated(hoJsonToken))) Begin
        Send CreateComObject of hoJsonToken
    End
    Get ComLoadFile Of hoJsonToken "qa_data/tokens/googleCloudStorage.json" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoJsonToken To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Send a POST equivalent to this curl command.
    // The content of the file is contained in the request body.

    // curl -X POST --data-binary @[OBJECT] \
    //     -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    //     -H "Content-Type: [OBJECT_CONTENT_TYPE]" \
    //     "https://www.googleapis.com/upload/storage/v1/b/[BUCKET_NAME]/o?uploadType=media&name=[OBJECT_NAME]"

    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End
    Get ComStringOf Of hoJsonToken "access_token" To sTemp1
    Set ComAuthToken Of hoHttp To sTemp1

    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbPath
    If (Not(IsComObjectCreated(hoSbPath))) Begin
        Send CreateComObject of hoSbPath
    End
    Get ComAppend Of hoSbPath "/upload/storage/v1/b/bucket_name/o?uploadType=media&name=object_name" To iSuccess
    Get ComReplace Of hoSbPath "bucket_name" "chilkat-bucket-b" To iNumReplaced
    Get ComReplace Of hoSbPath "object_name" "penguins.jpg" To iNumReplaced

    Get Create (RefClass(cComChilkatHttpRequest)) To hoReq
    If (Not(IsComObjectCreated(hoReq))) Begin
        Send CreateComObject of hoReq
    End
    Set ComHttpVerb Of hoReq To "POST"
    Get ComGetAsString Of hoSbPath To sTemp1
    Set ComPath Of hoReq To sTemp1
    Set ComContentType Of hoReq To "image/jpeg"
    // Indicate the file to be streamed in the request body when the HTTP POST is sent.
    Get ComStreamBodyFromFile Of hoReq "qa_data/jpg/penguins.jpg" To iSuccess

    Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
    If (Not(IsComObjectCreated(hoResp))) Begin
        Send CreateComObject of hoResp
    End
    Get pvComObject of hoReq to vReq
    Get pvComObject of hoResp to vResp
    Get ComHttpSReq Of hoHttp "www.googleapis.com" 443 True vReq vResp To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComStatusCode Of hoResp To iResponseCode
    If (iResponseCode = 401) Begin
        Get ComBodyStr Of hoResp To sTemp1
        Showln sTemp1
        Showln "If invalid credentials, then it is likely the access token expired."
        Showln "Your app should automatically fetch a new access token and re-try."
        Procedure_Return
    End

    Showln "Response code: " iResponseCode
    Showln "Response body"
    Get ComBodyStr Of hoResp To sTemp1
    Showln sTemp1

    // A successful response looks like this:
    // Response code: 200
    // Response body
    // {
    //  "kind": "storage#object",
    //  "id": "chilkat-ocean/penguins.jpg/1502643657837855",
    //  "selfLink": "https://www.googleapis.com/storage/v1/b/chilkat-ocean/o/penguins.jpg",
    //  "name": "penguins.jpg",
    //  "bucket": "chilkat-ocean",
    //  "generation": "1502643657837855",
    //  "metageneration": "1",
    //  "contentType": "image/jpeg",
    //  "timeCreated": "2017-08-13T17:00:57.811Z",
    //  "updated": "2017-08-13T17:00:57.811Z",
    //  "storageClass": "MULTI_REGIONAL",
    //  "timeStorageClassUpdated": "2017-08-13T17:00:57.811Z",
    //  "size": "777835",
    //  "md5Hash": "nTd7EM53jEk4s8fixjoimg==",
    //  "mediaLink": "https://www.googleapis.com/download/storage/v1/b/chilkat-ocean/o/penguins.jpg?generation=1502643657837855&alt=media",
    //  "crc32c": "ixxYVw==",
    //  "etag": "CJ+azOvX1NUCEAE="
    // }


End_Procedure