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:
parent
3c78b6f166
commit
09e952b665
2 changed files with 20 additions and 14 deletions
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue