Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Amazon Glacier Upload Archive from In-Memory DataDemonstrates how to add an archive to a vault from data in memory. Note: This example requires Chilkat v9.5.0.78 or greater.
IncludeFile "CkBinData.pb" IncludeFile "CkStringBuilder.pb" IncludeFile "CkAuthAws.pb" IncludeFile "CkRest.pb" IncludeFile "CkCrypt2.pb" Procedure ChilkatExample() ; 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.i = CkRest::ckConnect(rest,"glacier.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, "glacier") CkAuthAws::setCkRegion(authAws, "us-west-2") success = CkRest::ckSetAuthAws(rest,authAws) ; -------------------------------------------------------------------------- ; Note: The above REST connection and setup of the AWS credentials ; can be done once. After connecting, any number of REST calls can be made. ; The "auto reconnect" property passed to rest.Connect indicates that if ; the connection is lost, a REST method call will automatically reconnect ; if needed. ; -------------------------------------------------------------------------- ; Load the data to be uploaded. bd.i = CkBinData::ckCreate() If bd.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkBinData::ckLoadFile(bd,"qa_data/jpg/penguins.jpg") ; (The point here is that the contents of the bd don't necessarily have to come from a file.) ; ; For more information, see Glacier Upload Archive Reference Documentation ; CkRest::ckAddHeader(rest,"x-amz-glacier-version","2012-06-01") ; We'll need to pre-compute the SHA256 tree hash and the SHA256 linear hash. ; The hashes are added in the following request headers: ; x-amz-sha256-tree-hash: SHA256 tree hash ; x-amz-content-sha256: SHA256 linear hash crypt.i = CkCrypt2::ckCreate() If crypt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkCrypt2::setCkHashAlgorithm(crypt, "sha256-tree-hash") CkCrypt2::setCkEncodingMode(crypt, "hexlower") treeHashHex.s = CkCrypt2::ckHashBdENC(crypt,bd) CkRest::ckAddHeader(rest,"x-amz-sha256-tree-hash",treeHashHex) CkCrypt2::setCkHashAlgorithm(crypt, "sha256") linearHashHex.s = CkCrypt2::ckHashBdENC(crypt,bd) CkAuthAws::setCkPrecomputedSha256(authAws, linearHashHex) ; We can optionally add a description CkRest::ckAddHeader(rest,"x-amz-archive-description","Penguins JPG") sbResponseBody.i = CkStringBuilder::ckCreate() If sbResponseBody.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkRest::ckFullRequestBd(rest,"POST","/AWS_ACCOUNT_ID/vaults/chilkat/archives",bd,sbResponseBody) If success <> 1 Debug CkRest::ckLastErrorText(rest) CkRest::ckDispose(rest) CkAuthAws::ckDispose(authAws) CkBinData::ckDispose(bd) CkCrypt2::ckDispose(crypt) CkStringBuilder::ckDispose(sbResponseBody) ProcedureReturn EndIf respStatusCode.i = CkRest::ckResponseStatusCode(rest) If respStatusCode >= 400 Debug "Response Status Code = " + Str(respStatusCode) Debug "Response Header:" Debug CkRest::ckResponseHeader(rest) Debug "Response Body:" Debug CkStringBuilder::ckGetAsString(sbResponseBody) CkRest::ckDispose(rest) CkAuthAws::ckDispose(authAws) CkBinData::ckDispose(bd) CkCrypt2::ckDispose(crypt) CkStringBuilder::ckDispose(sbResponseBody) ProcedureReturn EndIf ; Success is indicated by a 201 response status with an empty response body. Debug "response status code = " + Str(respStatusCode) ; If successful, the response header looks like this. ; The Location and x-amz-archive-id are two items of information we may wish to save.. ; HTTP/1.1 201 Created ; x-amzn-RequestId: AAABZpJrTyioDC_HsOmHae8EZp_uBSJr6cnGOLKp_XJCl-Q ; Date: Wed, 10 Feb 2017 12:00:00 GMT ; x-amz-sha256-tree-hash: beb0fe31a1c7ca8c6c04d574ea906e3f97b31fdca7571defb5b44dca89b5af60 ; Location: /111122223333/vaults/examplevault/archives/NkbByEejwEggmBz2fTH ... GlqrEXAMPLEArchiveId ; x-amz-archive-id: NkbByEejwEggmBz2fTHgJrg0XBoDfjP4q6iu87-TjhqG6eGoOY9Z8i1_AUyUsu ... BfGlqrEXAMPLEArchiveId ; archiveId.s = CkRest::ckResponseHdrByName(rest,"x-amz-archive-id") Debug "x-amz-archive-id = " + archiveId location.s = CkRest::ckResponseHdrByName(rest,"Location") Debug "Location = " + location CkRest::ckDispose(rest) CkAuthAws::ckDispose(authAws) CkBinData::ckDispose(bd) CkCrypt2::ckDispose(crypt) CkStringBuilder::ckDispose(sbResponseBody) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.