1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

allow put_object to take a file or a string for its data argument

This commit is contained in:
Wesley Beary 2009-09-08 20:33:37 -07:00
parent 3c78b6f166
commit 09e952b665
2 changed files with 20 additions and 14 deletions

View file

@ -24,11 +24,11 @@ unless Fog.mocking?
# * response<~Fog::AWS::Response>:
# * headers<~Hash>:
# * 'ETag'<~String> - etag of new object
def put_object(bucket_name, object_name, object, options = {})
file = parse_file(object)
headers = file[:headers].merge!(options)
def put_object(bucket_name, object_name, data, options = {})
data = parse_data(data)
headers = data[:headers].merge!(options)
request({
:body => file[:body],
:body => data[:body],
:expects => 200,
:headers => headers,
:host => "#{bucket_name}.#{@host}",
@ -47,21 +47,21 @@ else
module AWS
class S3
def put_object(bucket_name, object_name, object, options = {})
file = parse_file(object)
def put_object(bucket_name, object_name, data, options = {})
data = parse_data(data)
response = Fog::Response.new
if (bucket = Fog::AWS::S3.data[:buckets][bucket_name])
response.status = 200
bucket[:objects][object_name] = {
:body => file[:body],
'Content-Type' => file[:headers]['Content-Type'],
:body => data[:body],
'ETag' => Fog::AWS::Mock.etag,
'Key' => object_name,
'LastModified' => Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000"),
'Owner' => { 'DisplayName' => 'owner', 'ID' => 'some_id'},
'Size' => file[:headers]['Content-Length'],
'Size' => data[:headers]['Content-Length'],
'StorageClass' => 'STANDARD'
}
bucket[:objects][object_name]['Content-Type'] = data[:headers]['Content-Type']
else
response.status = 404
raise(Fog::Errors.status_error(200, 404, response))

View file

@ -81,18 +81,24 @@ module Fog
private
def parse_file(file)
def parse_data(data)
metadata = {
:body => nil,
:headers => {}
}
filename = File.basename(file.path)
unless (mime_types = MIME::Types.of(filename)).empty?
metadata[:headers]['Content-Type'] = mime_types.first.content_type
if data.respond_to?(:path)
filename = File.basename(data.path)
unless (mime_types = MIME::Types.of(filename)).empty?
metadata[:headers]['Content-Type'] = mime_types.first.content_type
end
end
metadata[:body] = file.read
if data.respond_to?(:read)
metadata[:body] = data.read
else
metadata[:body] = data
end
metadata[:headers]['Content-Length'] = metadata[:body].size.to_s
metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip
metadata