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
(PowerBuilder) AWS S3 File Streaming UploadDemonstrates how to do a streaming upload from a file to the AWS S3 storage service. The AWS authorization presents some difficulties when the REST request body is to be streamed from a file (or from some other source). The issue is that the SHA-256 hash of the file data must be calculated. There are only two possible ways to do this: (1) stream the file into memory in its entirety and calculate the SHA-256 hash prior to uploading, or (2) pre-calculate the SHA-256 in a streaming fashion, and then provide it to the AWS authentication object. If the application does NOT pre-compute the SHA-256, then Chilkat (internally) is forced to stream into memory, calculate the SHA-256, and then upload from the in-memory copy of the file.
integer li_rc oleobject loo_Crypt string ls_FileToUploadPath string ls_HashStr oleobject loo_Rest integer li_BTls integer li_Port integer li_BAutoReconnect integer li_Success oleobject loo_AuthAws oleobject loo_FileStream string ls_ResponseStr // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // This first part is optional. AWS authentication requires // the SHA-256 hash of the request body (i.e. the contents of the file // to be uploaded). We can choose to pre-calculate the SHA-256 in a streaming fashion // and then provide it to the authenticator object. This way, if the file is // extremely large, it never needs to completely reside in memory. loo_Crypt = create oleobject // Use "Chilkat_9_5_0.Crypt2" for versions of Chilkat < 10.0.0 li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2") if li_rc < 0 then destroy loo_Crypt MessageBox("Error","Connecting to COM object failed") return end if loo_Crypt.EncodingMode = "hex" loo_Crypt.HashAlgorithm = "sha-256" ls_FileToUploadPath = "qa_data/xml/hamlet.xml" ls_HashStr = loo_Crypt.HashFileENC(ls_FileToUploadPath) loo_Rest = create oleobject // Use "Chilkat_9_5_0.Rest" for versions of Chilkat < 10.0.0 li_rc = loo_Rest.ConnectToNewObject("Chilkat.Rest") // Connect to the Amazon AWS REST server. li_BTls = 1 li_Port = 443 li_BAutoReconnect = 1 li_Success = loo_Rest.Connect("s3.amazonaws.com",li_Port,li_BTls,li_BAutoReconnect) // ---------------------------------------------------------------------------- // Important: For buckets created in regions outside us-east-1, // there are three important changes that need to be made. // See Working with S3 Buckets in Non-us-east-1 Regions for the details. // ---------------------------------------------------------------------------- // Provide AWS credentials for the REST call. loo_AuthAws = create oleobject // Use "Chilkat_9_5_0.AuthAws" for versions of Chilkat < 10.0.0 li_rc = loo_AuthAws.ConnectToNewObject("Chilkat.AuthAws") loo_AuthAws.AccessKey = "AWS_ACCESS_KEY" loo_AuthAws.SecretKey = "AWS_SECRET_KEY" loo_AuthAws.ServiceName = "s3" // Provide the pre-computed SHA-256 here: loo_AuthAws.PrecomputedSha256 = ls_HashStr li_Success = loo_Rest.SetAuthAws(loo_AuthAws) // Set the bucket name via the HOST header. // In this case, the bucket name is "chilkat100". loo_Rest.Host = "chilkat100.s3.amazonaws.com" loo_FileStream = create oleobject // Use "Chilkat_9_5_0.Stream" for versions of Chilkat < 10.0.0 li_rc = loo_FileStream.ConnectToNewObject("Chilkat.Stream") loo_FileStream.SourceFile = ls_FileToUploadPath // Upload to the S3 Storage service. // If the application provided the SHA-256 hash of the file contents (as shown above) // then file is streamed and never has to completely reside in memory. // If the application did NOT provide the SHA-256, then Chilkat will (internally) // load the entire file into memory, calculate the SHA-256, and then upload. ls_ResponseStr = loo_Rest.FullRequestStream("PUT","/hamlet.xml",loo_FileStream) if loo_Rest.LastMethodSuccess <> 1 then Write-Debug loo_Rest.LastErrorText destroy loo_Crypt destroy loo_Rest destroy loo_AuthAws destroy loo_FileStream return end if // When successful, the S3 Storage service will respond with a 200 response code, // with an XML body. if loo_Rest.ResponseStatusCode = 200 then Write-Debug ls_ResponseStr Write-Debug "File uploaded." else // Examine the request/response to see what happened. Write-Debug "response status code = " + string(loo_Rest.ResponseStatusCode) Write-Debug "response status text = " + loo_Rest.ResponseStatusText Write-Debug "response header: " + loo_Rest.ResponseHeader Write-Debug "response body: " + ls_ResponseStr Write-Debug "---" Write-Debug "LastRequestStartLine: " + loo_Rest.LastRequestStartLine Write-Debug "LastRequestHeader: " + loo_Rest.LastRequestHeader end if destroy loo_Crypt destroy loo_Rest destroy loo_AuthAws destroy loo_FileStream |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.