<cfif isdefined("form.image")>
<cfset payload=form.image>
<cfset time=dateadd("s",GetTimeZoneInfo().UTCTotalOffset,now())>
<cfset region="ap-southeast-2">
<cfset bucket="mybucket">
<cfset filename="test.jpg">
<cfset awsid="myawsid">
<cfset awssecret="myawssecret">
<cfset myrequest="PUT#chr(10)#http://#bucket#.#hostname#/#filename##chr(10)##chr(10)#host:#bucket#.#hostname##chr(10)#x-amz-content-sha256:#lcase(hash(payload,"sha-256"))##chr(10)#x-amz-date:#dateformat(time,"yyyymmdd")#T#timeformat(time,"HHmmss")#Z#chr(10)##chr(10)#host;x-amz-content-sha256;x-amz-date#chr(10)##lcase(hash(payload,"sha-256"))##chr(10)#">
<cfset mystring="AWS4-HMAC-SHA256#chr(10)##dateformat(time,"yyyymmdd")#T#timeformat(time,"HHmmss")#Z#chr(10)##dateformat(time,"yyyymmdd")#/#region#/s3/aws4_request#chr(10)##lcase(hash(myrequest,"sha-256"))##chr(10)#">
<cfset string1=tobinary(hmac(dateformat(time,"yyyymmdd"),"AWS4#awssecret#","hmacsha256"))>
<cfset string2=tobinary(hmac(region,string1,"hmacsha256"))>
<cfset string3=tobinary(hmac("s3",string2,"hmacsha256"))>
<cfset mykey=tobinary(hmac("aws4_request",string3,"hmacsha256"))>
<cfset signature=lcase(hmac(mystring,mykey,"hmacsha256"))>
<cfhttp url="http://#bucket#.#hostname#/#filename#" method="PUT" timeout="10">
<cfhttpparam type="header" name="Authorization" value="AWS4-HMAC-SHA256 Credential=#awsid#/#dateformat(time,"yyyymmdd")#/#region#/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=#signature#">
<cfhttpparam type="header" name="Content-Length" value="#len(payload)#">
<cfhttpparam type="header" name="Content-Type" value="image/jpeg">
<cfhttpparam type="header" name="Host" value="#bucket#.#hostname#">
<cfhttpparam type="header" name="x-amz-content-sha256" value="#lcase(hash(payload,"sha-256"))#">
<cfhttpparam type="header" name="x-amz-date" value="#dateformat(time,"yyyymmdd")#T#timeformat(time,"HHmmss")#Z">
<cfhttpparam type="body" value="#payload#">
</cfhttp>
<cfoutput>#cfhttp.statuscode#<br><pre>#cfhttp.filecontent#</pre><p></cfoutput><a href="test.cfm">> Return</a>
<cfelse>
<form action="test.cfm" enctype="multipart/form-data" method="post">
Upload image: <input name="image" type="file"> <input type="submit" value="Upload">
</form>
</cfif>