DataFlex Google Cloud Storage: Copy File (Object) to another Bucket

Back to Index

Copies a fie (also known as an object) to another Google Cloud Storage bucket. This example copies the file "starfish.jpg" from the "chilkat-test" bucket to the "chilkat-images" bucket. In Google Cloud Storage, moving a file to a new bucket is a 2-step operation: First copy the file, then delete the original.

Documentation: https://cloud.google.com/storage/docs/renaming-copying-moving-objects

CURL Command

curl -X POST https://www.googleapis.com/storage/v1/b/chilkat-bucket/o/starfish.jpg/rewriteTo/b/chilkat-images/o/starfish.jpg?project=MY_CLOUD_STORAGE_PROJECT \
    --header "Authorization: Bearer CLOUD_STORAGE_TOKEN"

DataFlex Example

Use ChilkatAx-9.5.0-win32.pkg

Procedure Test
    Handle hoRest
    Boolean iSuccess
    Boolean iBTls
    Integer iPort
    Boolean iBAutoReconnect
    Variant vSbResponseBody
    Handle hoSbResponseBody
    Integer iRespStatusCode
    Handle hoJsonResponse
    String sKind
    String sTotalBytesRewritten
    String sObjectSize
    Boolean iDone
    String sResourceKind
    String sResourceId
    String sResourceSelfLink
    String sResourceName
    String sResourceBucket
    String sResourceGeneration
    String sResourceMetageneration
    String sResourceContentType
    String sResourceTimeCreated
    String sResourceUpdated
    String sResourceStorageClass
    String sResourceTimeStorageClassUpdated
    String sResourceSize
    String sResourceMd5Hash
    String sResourceMediaLink
    String sResourceCrc32c
    String sResourceEtag
    String sTemp1
    Integer iTemp1

    Get Create (RefClass(cComChilkatRest)) To hoRest
    If (Not(IsComObjectCreated(hoRest))) Begin
        Send CreateComObject of hoRest
    End

    //  URL: https://www.googleapis.com/storage/v1/b/chilkat-bucket/o/starfish.jpg/rewriteTo/b/chilkat-images/o/starfish.jpg?project=MY_CLOUD_STORAGE_PROJECT
    Move True To iBTls
    Move 443 To iPort
    Move True To iBAutoReconnect
    Get ComConnect Of hoRest "www.googleapis.com" iPort iBTls iBAutoReconnect To iSuccess
    If (iSuccess <> True) Begin
        Get ComConnectFailReason Of hoRest To iTemp1
        Showln "ConnectFailReason: " iTemp1
        Get ComLastErrorText Of hoRest To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComAddHeader Of hoRest "Authorization" "Bearer CLOUD_STORAGE_TOKEN" To iSuccess

    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbResponseBody
    If (Not(IsComObjectCreated(hoSbResponseBody))) Begin
        Send CreateComObject of hoSbResponseBody
    End
    Get pvComObject of hoSbResponseBody to vSbResponseBody
    Get ComFullRequestNoBodySb Of hoRest "POST" "/storage/v1/b/chilkat-bucket/o/starfish.jpg/rewriteTo/b/chilkat-images/o/starfish.jpg?project=MY_CLOUD_STORAGE_PROJECT" vSbResponseBody To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoRest To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComResponseStatusCode Of hoRest To iRespStatusCode
    If (iRespStatusCode >= 400) Begin
        Showln "Response Status Code = " iRespStatusCode
        Showln "Response Header:"
        Get ComResponseHeader Of hoRest To sTemp1
        Showln sTemp1
        Showln "Response Body:"
        Get ComGetAsString Of hoSbResponseBody To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get Create (RefClass(cComChilkatJsonObject)) To hoJsonResponse
    If (Not(IsComObjectCreated(hoJsonResponse))) Begin
        Send CreateComObject of hoJsonResponse
    End
    Get pvComObject of hoSbResponseBody to vSbResponseBody
    Get ComLoadSb Of hoJsonResponse vSbResponseBody To iSuccess

    //  See the Online Tool for Generating JSON Parse Code

    Get ComStringOf Of hoJsonResponse "kind" To sKind
    Get ComStringOf Of hoJsonResponse "totalBytesRewritten" To sTotalBytesRewritten
    Get ComStringOf Of hoJsonResponse "objectSize" To sObjectSize
    Get ComBoolOf Of hoJsonResponse "done" To iDone
    Get ComStringOf Of hoJsonResponse "resource.kind" To sResourceKind
    Get ComStringOf Of hoJsonResponse "resource.id" To sResourceId
    Get ComStringOf Of hoJsonResponse "resource.selfLink" To sResourceSelfLink
    Get ComStringOf Of hoJsonResponse "resource.name" To sResourceName
    Get ComStringOf Of hoJsonResponse "resource.bucket" To sResourceBucket
    Get ComStringOf Of hoJsonResponse "resource.generation" To sResourceGeneration
    Get ComStringOf Of hoJsonResponse "resource.metageneration" To sResourceMetageneration
    Get ComStringOf Of hoJsonResponse "resource.contentType" To sResourceContentType
    Get ComStringOf Of hoJsonResponse "resource.timeCreated" To sResourceTimeCreated
    Get ComStringOf Of hoJsonResponse "resource.updated" To sResourceUpdated
    Get ComStringOf Of hoJsonResponse "resource.storageClass" To sResourceStorageClass
    Get ComStringOf Of hoJsonResponse "resource.timeStorageClassUpdated" To sResourceTimeStorageClassUpdated
    Get ComStringOf Of hoJsonResponse "resource.size" To sResourceSize
    Get ComStringOf Of hoJsonResponse "resource.md5Hash" To sResourceMd5Hash
    Get ComStringOf Of hoJsonResponse "resource.mediaLink" To sResourceMediaLink
    Get ComStringOf Of hoJsonResponse "resource.crc32c" To sResourceCrc32c
    Get ComStringOf Of hoJsonResponse "resource.etag" To sResourceEtag


End_Procedure

Sample JSON Response Body

{
  "kind": "storage#rewriteResponse",
  "totalBytesRewritten": "6229",
  "objectSize": "6229",
  "done": true,
  "resource": {
    "kind": "storage#object",
    "id": "chilkat-images/starfish.jpg/1540298057547474",
    "selfLink": "https://www.googleapis.com/storage/v1/b/chilkat-images/o/starfish.jpg",
    "name": "starfish.jpg",
    "bucket": "chilkat-images",
    "generation": "1540298057547474",
    "metageneration": "1",
    "contentType": "image/jpeg",
    "timeCreated": "2018-10-23T12:34:17.547Z",
    "updated": "2018-10-23T12:34:17.547Z",
    "storageClass": "MULTI_REGIONAL",
    "timeStorageClassUpdated": "2018-10-23T12:34:17.547Z",
    "size": "6229",
    "md5Hash": "LpxZ2/JmI2fcl9/dqF2gSA==",
    "mediaLink": "https://www.googleapis.com/download/storage/v1/b/chilkat-images/o/starfish.jpg?generation=1540298057547474&alt=media",
    "crc32c": "9RjgwQ==",
    "etag": "CNL9xbTJnN4CEAE="
  }
}