Using s3 URLs with Ruby's open-uri 11 Aug 2011
Ruby’s open-uri is a wonderful hack, and I recently got to figure out how ot plug in additional URL schemes. Here is a quick and dirty to allow urls of the form s3://<bucket>/<object> :
require 'aws/s3'
module URI
class S3 < Generic
def initialize(*args)
@bucket, @file = args[2], args[5][1,args[5].length]
super(*args)
end
def open &block
http_url = AWS::S3::S3Object.url_for @file, @bucket
URI.parse(http_url).open &block
end
end
@@schemes['S3'] = S3
end
It uses the AWS::S3 library, but could be adapted pretty easily to the AWS SDK for Ruby. It does require the normal initialization but then just works :-)
open("s3://skife/whiteboard.jpg") do |in|
# do stuff with the contents...
end