Amazon S3 is a web service offered by Amazon Web Services. Amazon S3 provides storage through web services interfaces.
With the help of the following code, you can upload file on Amazon S3 through Apex
Prerequisites
- Need account on AWS
- Create bucket on AWS
- Bucket Name, Secret key, key, and region is used for authentication
Apex Class Code
Attachment attach = [select Body,ContentType,Name from Attachment where id ={AttachmentID} limit 1]; String attachmentBody = EncodingUtil.base64Encode(attach.Body); String formattedDateString = Datetime.now().formatGMT('EEE, dd MMM yyyy HH:mm:ss z'); String key = '******************’'; //AWS key String secret = '*****************'; //AWS Secret key String bucketname = 'bucketName'; //AWS bucket name String host = 's3-us-west-1.amazonaws.com'; String method = 'PUT'; String filename = attach.Id + '-' + attach.Name; HttpRequest req = new HttpRequest(); req.setMethod(method); req.setEndpoint('https://' + bucketname + '.' + host + '/' + filename); req.setHeader('Host', bucketname + '.' + host); req.setHeader('Content-Length', String.valueOf(attachmentBody.length())); req.setHeader('Content-Encoding', 'UTF-8'); req.setHeader('Content-type', attach.ContentType); req.setHeader('Connection', 'keep-alive'); req.setHeader('Date', formattedDateString); req.setHeader('ACL', 'public-read-write'); req.setBodyAsBlob(attach.Body); String stringToSign = 'PUTnn' + attach.ContentType + 'n' + formattedDateString + 'n' + '/' + bucketname + '/' + filename; String encodedStringToSign = EncodingUtil.urlEncode(stringToSign, 'UTF-8'); Blob mac = Crypto.generateMac('HMACSHA1', blob.valueof(stringToSign),blob.valueof(secret)); String signedKey = EncodingUtil.base64Encode(mac); String authHeader = 'AWS' + ' ' + key + ':' + signedKey ; req.setHeader('Authorization',authHeader); String decoded = EncodingUtil.urlDecode(encodedStringToSign , 'UTF-8'); Http http = new Http(); HTTPResponse res = http.send(req);
You need to copy this code in your apex class with some inputs and it helps you to upload files to Amazon S3 with Salesforce.
Happy Salesforce 🙂
Leave a comment