Visual FoxPro 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"

Visual FoxPro Example

LOCAL loRest
LOCAL lnSuccess
LOCAL lnBTls
LOCAL lnPort
LOCAL lnBAutoReconnect
LOCAL loSbResponseBody
LOCAL lnRespStatusCode
LOCAL loJsonResponse
LOCAL lcKind
LOCAL lcTotalBytesRewritten
LOCAL lcObjectSize
LOCAL lnDone
LOCAL lcResourceKind
LOCAL lcResourceId
LOCAL lcResourceSelfLink
LOCAL lcResourceName
LOCAL lcResourceBucket
LOCAL lcResourceGeneration
LOCAL lcResourceMetageneration
LOCAL lcResourceContentType
LOCAL lcResourceTimeCreated
LOCAL lcResourceUpdated
LOCAL lcResourceStorageClass
LOCAL lcResourceTimeStorageClassUpdated
LOCAL lcResourceSize
LOCAL lcResourceMd5Hash
LOCAL lcResourceMediaLink
LOCAL lcResourceCrc32c
LOCAL lcResourceEtag

loRest = CreateObject('Chilkat_9_5_0.Rest')

*  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
lnBTls = 1
lnPort = 443
lnBAutoReconnect = 1
lnSuccess = loRest.Connect("www.googleapis.com",lnPort,lnBTls,lnBAutoReconnect)
IF (lnSuccess <> 1) THEN
    ? "ConnectFailReason: " + STR(loRest.ConnectFailReason)
    ? loRest.LastErrorText
    RELEASE loRest
    CANCEL
ENDIF

loRest.AddHeader("Authorization","Bearer CLOUD_STORAGE_TOKEN")

loSbResponseBody = CreateObject('Chilkat_9_5_0.StringBuilder')
lnSuccess = loRest.FullRequestNoBodySb("POST","/storage/v1/b/chilkat-bucket/o/starfish.jpg/rewriteTo/b/chilkat-images/o/starfish.jpg?project=MY_CLOUD_STORAGE_PROJECT",loSbResponseBody)
IF (lnSuccess <> 1) THEN
    ? loRest.LastErrorText
    RELEASE loRest
    RELEASE loSbResponseBody
    CANCEL
ENDIF

lnRespStatusCode = loRest.ResponseStatusCode
IF (lnRespStatusCode >= 400) THEN
    ? "Response Status Code = " + STR(lnRespStatusCode)
    ? "Response Header:"
    ? loRest.ResponseHeader
    ? "Response Body:"
    ? loSbResponseBody.GetAsString()
    RELEASE loRest
    RELEASE loSbResponseBody
    CANCEL
ENDIF

loJsonResponse = CreateObject('Chilkat_9_5_0.JsonObject')
loJsonResponse.LoadSb(loSbResponseBody)

*  See the Online Tool for Generating JSON Parse Code

lcKind = loJsonResponse.StringOf("kind")
lcTotalBytesRewritten = loJsonResponse.StringOf("totalBytesRewritten")
lcObjectSize = loJsonResponse.StringOf("objectSize")
lnDone = loJsonResponse.BoolOf("done")
lcResourceKind = loJsonResponse.StringOf("resource.kind")
lcResourceId = loJsonResponse.StringOf("resource.id")
lcResourceSelfLink = loJsonResponse.StringOf("resource.selfLink")
lcResourceName = loJsonResponse.StringOf("resource.name")
lcResourceBucket = loJsonResponse.StringOf("resource.bucket")
lcResourceGeneration = loJsonResponse.StringOf("resource.generation")
lcResourceMetageneration = loJsonResponse.StringOf("resource.metageneration")
lcResourceContentType = loJsonResponse.StringOf("resource.contentType")
lcResourceTimeCreated = loJsonResponse.StringOf("resource.timeCreated")
lcResourceUpdated = loJsonResponse.StringOf("resource.updated")
lcResourceStorageClass = loJsonResponse.StringOf("resource.storageClass")
lcResourceTimeStorageClassUpdated = loJsonResponse.StringOf("resource.timeStorageClassUpdated")
lcResourceSize = loJsonResponse.StringOf("resource.size")
lcResourceMd5Hash = loJsonResponse.StringOf("resource.md5Hash")
lcResourceMediaLink = loJsonResponse.StringOf("resource.mediaLink")
lcResourceCrc32c = loJsonResponse.StringOf("resource.crc32c")
lcResourceEtag = loJsonResponse.StringOf("resource.etag")

RELEASE loRest
RELEASE loSbResponseBody
RELEASE loJsonResponse

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="
  }
}