PureBasic
PureBasic
S3 Rename File
See more Amazon S3 (new) Examples
Demonstrates how to rename a file on Amazon S3.Renaming an object (file) in AWS S3 using the AWS S3 API involves copying the object to a new location with the desired name and then deleting the original object.
Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkAuthAws.pb"
IncludeFile "CkRest.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
rest.i = CkRest::ckCreate()
If rest.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Connect to the Amazon AWS REST server in the desired region.
bTls.i = 1
port.i = 443
bAutoReconnect.i = 1
success = CkRest::ckConnect(rest,"s3-us-west-2.amazonaws.com",port,bTls,bAutoReconnect)
; Provide AWS credentials.
authAws.i = CkAuthAws::ckCreate()
If authAws.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY")
CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY")
CkAuthAws::setCkServiceName(authAws, "s3")
; This particular bucket is in the Oregon region, as opposed to the US Standard,
; therefore the Region must be set appropriately.
; Also note that we connected to "s3-us-west-2.amazonaws.com".
CkAuthAws::setCkRegion(authAws, "us-west-2")
CkRest::ckSetAuthAws(rest,authAws)
; Set the bucket name via the HOST header.
; In this case, the bucket name is "chilkat.qa".
; Note that the Host header should use "bucketName.s3.amazonaws.com", not "bucketName.s3-us-west-2.amazonaws.com"
CkRest::setCkHost(rest, "chilkat.qa.s3.amazonaws.com")
; Copy /images/sea_creatures/starfish.jpg to /images/sea_creatures/starfish3.jpg
; Notice here that the x-amz-copy-source includes the bucket in the source path,
; but the target path passed to FullRequestNoBody does NOT contain the bucket (because the bucket
; was already specified in the Host header).
CkRest::ckAddHeader(rest,"x-amz-copy-source","/chilkat.qa/images/sea_creatures/starfish.jpg")
sbResponse.i = CkStringBuilder::ckCreate()
If sbResponse.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRest::ckFullRequestNoBodySb(rest,"PUT","/images/sea_creatures/starfish3.jpg",sbResponse)
If success = 0
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
CkStringBuilder::ckDispose(sbResponse)
ProcedureReturn
EndIf
; When successful, the S3 Storage service will respond with a 200 or 204 response code,
; with an XML body.
If CkRest::ckResponseStatusCode(rest) <> 200
; Examine the request/response to see what happened.
Debug "response status code = " + Str(CkRest::ckResponseStatusCode(rest))
Debug "response status text = " + CkRest::ckResponseStatusText(rest)
Debug "response header: " + CkRest::ckResponseHeader(rest)
Debug "response body: " + CkStringBuilder::ckGetAsString(sbResponse)
Debug "---"
Debug "LastRequestStartLine: " + CkRest::ckLastRequestStartLine(rest)
Debug "LastRequestHeader: " + CkRest::ckLastRequestHeader(rest)
EndIf
Debug CkStringBuilder::ckGetAsString(sbResponse)
Debug "Copy Successful."
; --------------------------------------
; Now we can delete the original file..
; --------------------------------------
; We no longer want to send the x-amz-copy-source header. Remove it.
CkRest::ckRemoveHeader(rest,"x-amz-copy-source")
success = CkRest::ckFullRequestNoBodySb(rest,"DELETE","/images/sea_creatures/starfish.jpg",sbResponse)
If success = 0
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
CkStringBuilder::ckDispose(sbResponse)
ProcedureReturn
EndIf
; If successfully deleted, the response status code is 204 and the response body text will be empty.
statusCode.i = CkRest::ckResponseStatusCode(rest)
Debug "Response status code = " + Str(statusCode)
Debug "Response text = "
Debug CkStringBuilder::ckGetAsString(sbResponse)
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
CkStringBuilder::ckDispose(sbResponse)
ProcedureReturn
EndProcedure