Sample code for 30+ languages & platforms
DataFlex

Upload String to Google Cloud Storage

See more Google Cloud Storage Examples

Demonstrates how to upload an in-memory string to Google Cloud Storage.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoSbToken
    Handle hoHttp
    Handle hoXml
    Variant vSbXml
    Handle hoSbXml
    String sUrl
    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"

    // In this example, Get Google Cloud Storage OAuth2 Access Token, 
    // the service account access token was saved to a text file.  This example fetches the access token from the file..
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbToken
    If (Not(IsComObjectCreated(hoSbToken))) Begin
        Send CreateComObject of hoSbToken
    End
    Get ComLoadFile Of hoSbToken "qa_data/tokens/googleCloudStorageAccessToken.txt" "utf-8" To iSuccess

    // 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 ComGetAsString Of hoSbToken To sTemp1
    Set ComAuthToken Of hoHttp To sTemp1

    // Create an XML document, and write it to a StringBuilder.
    // We'll be uploading this XML document.
    Get Create (RefClass(cComChilkatXml)) To hoXml
    If (Not(IsComObjectCreated(hoXml))) Begin
        Send CreateComObject of hoXml
    End
    Set ComTag Of hoXml To "note"
    Send ComUpdateChildContent To hoXml "to" "Tove"
    Send ComUpdateChildContent To hoXml "from" "Jani"
    Send ComUpdateChildContent To hoXml "heading" "Reminder"
    Send ComUpdateChildContent To hoXml "body" "Don't forget me this weekend!"

    // Write the XML to sbXml.
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbXml
    If (Not(IsComObjectCreated(hoSbXml))) Begin
        Send CreateComObject of hoSbXml
    End
    Get pvComObject of hoSbXml to vSbXml
    Get ComGetXmlSb Of hoXml vSbXml To iSuccess

    // sbXml contains this:

    // <note>
    //     <to>Tove</to>
    //     <from>Jani</from>
    //     <heading>Reminder</heading>
    //     <body>Don't forget me this weekend!</body>
    // </note>

    // Construct a URL to upload to an object named "test.xml" in the "chilkat-ocean" bucket.
    Get ComSetUrlVar Of hoHttp "bucket_name" "chilkat-ocean" To iSuccess
    Get ComSetUrlVar Of hoHttp "object_name" "test.xml" To iSuccess
    Move "https://www.googleapis.com/upload/storage/v1/b/{$bucket_name}/o?uploadType=media&name={$object_name}" To sUrl

    Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
    If (Not(IsComObjectCreated(hoResp))) Begin
        Send CreateComObject of hoResp
    End
    Get pvComObject of hoSbXml to vSbXml
    Get pvComObject of hoResp to vResp
    Get ComHttpSb Of hoHttp "POST" sUrl vSbXml "utf-8" "application/xml" 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/test.xml/1502669565429870",
    //  "selfLink": "https://www.googleapis.com/storage/v1/b/chilkat-ocean/o/test.xml",
    //  "name": "test.xml",
    //  "bucket": "chilkat-ocean",
    //  "generation": "1502669565429870",
    //  "metageneration": "1",
    //  "contentType": "application/xml",
    //  "timeCreated": "2017-08-14T00:12:45.379Z",
    //  "updated": "2017-08-14T00:12:45.379Z",
    //  "storageClass": "MULTI_REGIONAL",
    //  "timeStorageClassUpdated": "2017-08-14T00:12:45.379Z",
    //  "size": "181",
    //  "md5Hash": "TCR0L7TWsw2TzOvfNvgEfA==",
    //  "mediaLink": "https://www.googleapis.com/download/storage/v1/b/chilkat-ocean/o/test.xml?generation=1502669565429870&alt=media",
    //  "crc32c": "ZFd5sA==",
    //  "etag": "CO6Qpq241dUCEAE="
    // }


End_Procedure