|
|
Amazon S3 - Add Text Object to Bucket
This example writes some text and metadata into the "Neo" object in the "chilkat" bucket:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<%
set http = Server.CreateObject("Chilkat_9_5_0.Http")
success = http.UnlockComponent("Anything for 30-day trial.")
If (success <> 1) Then
' Unlock failed.
Response.Write "<pre>" & Server.HTMLEncode(http.LastErrorText) & "</pre>"
End If
' We'll need this for HMAC and MD5...
set crypt = Server.CreateObject("Chilkat_9_5_0.Crypt2")
success = crypt.UnlockComponent("Anything for 30-day trial.")
If (success <> 1) Then
Response.Write "<pre>" & Server.HTMLEncode(crypt.LastErrorText) & "</pre>"
End If
' 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()
' This is the content of the text object to be added to
' the "chilkat" bucket:
textData = "woah"
' This is the name of the object to be added:
objName = "Neo"
' Calculate the MD5 hash of the object's content:
crypt.HashAlgorithm = "md5"
crypt.EncodingMode = "base64"
crypt.Charset = "windows-1252"
md5Hash = crypt.HashStringENC(textData)
' 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 (text/plain) must match the content-type
' passed to the PutText method (below).
strToSign = "PUT" & vbLf & md5Hash & vbLf & "text/plain" & vbLf & curDateTime & vbLf & "/chilkat/" & objName
' We want SHA1 for the HMAC hash algorithm:
crypt.HashAlgorithm = "sha1"
' These must be changed for your account:
AWSAccessKeyId = "zzzzzzzzzzzzzzzzzzzz"
AWSSecretAccessKey = "zzzzzzzzzzzzzzzzzzzzzzzzzzzz"
' 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.PutText(url,textData,"windows-1252","text/plain",bMd5,bGzip)
If (http.LastStatus = 200) Then
Response.Write "<pre>" & Server.HTMLEncode("Object added to bucket!") & "</pre>"
' Let's check out the response header anyway...
Response.Write "<pre>" & Server.HTMLEncode( http.LastResponseHeader) & "</pre>"
Else
' Failed. Show the last request header, response header,
' and response body.
Response.Write "<pre>" & Server.HTMLEncode( http.LastHeader) & "</pre>"
Response.Write "<pre>" & Server.HTMLEncode( "---") & "</pre>"
Response.Write "<pre>" & Server.HTMLEncode( http.LastResponseHeader) & "</pre>"
Response.Write "<pre>" & Server.HTMLEncode( "---") & "</pre>"
Response.Write "<pre>" & Server.HTMLEncode( http.LastErrorText) & "</pre>"
End If
%>
</body>
</html>
|