Chilkat HOME ASP Visual Basic VB.NET C# Visual C++ C MFC Delphi FoxPro Java Perl PHP Python Ruby SQL Server VBScript
|
Amazon S3 - Add Image (GIF) to BucketDemonstrates how to upload an image file (binary data) to an Amazon S3 bucket.
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CHILKATFILEACCESSLib_TLB, CHILKATHTTPLib_TLB, CHILKATCRYPT2Lib_TLB, OleCtrls; ... procedure TForm1.Button1Click(Sender: TObject); var http: TChilkatHttp; success: Integer; crypt: TChilkatCrypt2; curDateTime: String; gifData: Array of Byte; fac: TCkFileAccess; objName: String; md5Hash: String; strToSign: String; AWSAccessKeyId: String; AWSSecretAccessKey: String; signature: String; authValue: String; bGzip: Integer; bMd5: Integer; url: String; strResponse: String; begin http := TChilkatHttp.Create(Self); success := http.UnlockComponent('Anything for 30-day trial.'); if (success <> 1) then begin // Unlock failed. ShowMessage(http.LastErrorText); Exit; end; // We'll need this for HMAC and MD5... crypt := TChilkatCrypt2.Create(Self); success := crypt.UnlockComponent('Anything for 30-day trial.'); if (success <> 1) then begin ShowMessage(crypt.LastErrorText); Exit; end; // The HTTP component now includes a method to generate // the current date/time in RFC 2616 compliant format. // Note: The GenTimeStamp method is available as a pre-release (as of 18-June-2008). // It will become available in the next new version dated after // 18-June-2008. curDateTime := http.GenTimeStamp(); fac := TCkFileAccess.Create(Self); gifData := fac.ReadEntireFile('dude.gif'); // This is the name of the object to be added: objName := 'NeoGif'; // Calculate the MD5 hash of the object's content: crypt.HashAlgorithm := 'md5'; crypt.EncodingMode := 'base64'; crypt.Charset := 'windows-1252'; md5Hash := crypt.HashBytesENC(gifData); // Create the string to be signed. // IMPORTANT: // If a Content-MD5 header is added (see below), then // you also need to include the MD5 hash of the content // here. // The content-type (image/gif) must match the content-type // passed to the PutBinary method (below). strToSign := 'PUT' + #10 + md5Hash + #10 + 'image/gif' + #10 + curDateTime + #10 + '/chilkat/' + objName; // We want SHA1 for the HMAC hash algorithm: crypt.HashAlgorithm := 'sha1'; // These must be changed for your account: AWSAccessKeyId := 'zzzzzzzzzzzzzzzzzzzzzz'; AWSSecretAccessKey := 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; // Set the HMAC secret key: crypt.SetHmacKeyString(AWSSecretAccessKey); // By setting the charset = "utf-8", the string will be converted // to utf-8 (internal to the Chilkat component) prior to signing: crypt.Charset := 'utf-8'; // Indicate that Base64 output is desired: crypt.EncodingMode := 'base64'; signature := crypt.HmacStringENC(strToSign); authValue := 'AWS ' + AWSAccessKeyId + ':' + signature; // The bucket to be used is specified in the Host header. // In this example, the object is added to the "chilkat" bucket: http.SetRequestHeader('Host','chilkat.s3.amazonaws.com'); http.SetRequestHeader('Authorization',authValue); http.SetRequestHeader('Date',curDateTime); // Do not GZIP the request body. To send a gzip compressed // object, simply set this to 1 bGzip := 0; // Automatically add an MD5 hash of the request body in the HTTP header // (using the Content-MD5 header field). bMd5 := 1; url := 'http://s3.amazonaws.com/' + objName; strResponse := http.PutBinary(url,gifData,'image/gif',bMd5,bGzip); if (http.LastStatus = 200) then begin // Success is indicated by a response status of 200. ShowMessage('Object added to bucket!'); // Let's check out the response header anyway... Memo1.Lines.Add(http.LastResponseHeader); end else begin // Failed. Show the last request header, response header, // and response body. Memo1.Lines.Add(http.LastHeader); Memo1.Lines.Add('---'); Memo1.Lines.Add(http.LastResponseHeader); Memo1.Lines.Add('---'); Memo1.Lines.Add(http.LastErrorText); end; end; |
Need a specific example? Send a request to support@chilkatsoft.com
© 2000-2007 Chilkat Software, Inc. All Rights Reserved.