Monday, 21 January 2008

RoR Upload image in S3


Install gem aws s3
gem install aws-s3
Before you can do anything, you must establish a connection using Base.establish_connection!. A basic connection would look something like this:
AWS::S3::Base.establish_connection!(:access_key_id => ‘abc’,
:secret_access_key => ’123′
)
Buckets are containers for objects (the files you store on S3). To create a new bucket you just specify its name.
AWS::S3::Bucket.create(‘bucket_name’)
Picture upload view
<% form_tag ({:action => ‘create’},{:multipart => true}) do %>
<table>
<tr>
<td>Image </td>
<td> <%= file_field_tag “event_picture” %></td>
</tr>
</table>
<%= submit_tag “Create” %>
<% end %>
Controller
include require ‘aws/s3′ in controller
def create
filename = @params['event_picture'].original_filename.gsub(/[^a-zA-Z0-9.]/,’_')
data = @params['event_picture'].read
AWS::S3::Base.establish_connection!(:access_key_id => ’123′,
:secret_access_key => ‘abc’)
AWS::S3::S3Object.store(filename,
data,
‘bucket_name’,
:content_type => ‘image/jpg’)
end
even you can change grants for image
policy = AWS::S3::S3Object.acl(filename, ‘bucket_name’)
policy.grants << AWS::S3::ACL::Grant.grant(:public_read)
policy.grants << AWS::S3::ACL::Grant.grant(:public_read_acp)
AWS::S3::S3Object.acl(filename, ‘bucket_name’, policy)