Class: S3Service

Inherits:
Object
  • Object
show all
Defined in:
lib/httpimagestore/s3_service.rb

Instance Method Summary collapse

Constructor Details

#initialize(key_id, key_secret, bucket, options = {}) ⇒ S3Service

Returns a new instance of S3Service.



5
6
7
8
9
10
11
12
13
# File 'lib/httpimagestore/s3_service.rb', line 5

def initialize(key_id, key_secret, bucket, options = {})
	@options = options
	@logger = (options[:logger] or Logger.new('/dev/null'))

	@s3 = S3::Service.new(:access_key_id => key_id, :secret_access_key => key_secret)

	@logger.info "Getting bucket: #{bucket}"
	@bucket = @s3.buckets.find(bucket) or fail "no buckte '#{bucket}' found"
end

Instance Method Details

#put_image(image_path, content_type, data) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/httpimagestore/s3_service.rb', line 15

def put_image(image_path, content_type, data)
	@logger.info "Putting image in bucket '#{@bucket.name}': #{image_path}"

	file = @bucket.objects.build(image_path)

	file.cache_control = @options[:cache_control] if @options.include?(:cache_control) and not @options[:cache_control].empty?

	file.content_type = content_type
	file.content = data

	RetryThis.retry_this(
		:times => (@options[:upload_retry_times] or 1),
		:sleep => (@options[:upload_retry_delay] or 0.0),
		:error_types => [Errno::ECONNRESET, Timeout::Error, S3::Error::RequestTimeout]
	) do |attempt|
		@logger.warn "Retrying S3 save operation" if attempt > 1
		file.save
	end

	"http://#{@bucket.name}.s3.amazonaws.com/#{image_path}"
end