def save
headers = {}
gzip_content!
headers['Content-Disposition'] = content_disposition
headers['Content-Encoding'] = content_encoding
headers['Content-Length'] = size.to_s
headers['Content-Type'] = content_type
headers['Cache-Control'] = cache_control
headers['Expires'] = expires
headers['Pragma'] = pragma
headers.each {|k,v| headers.delete(k) if v.nil? || v.empty? }
if !content_md5.nil?
self.content_md5 = Digest::MD5.hexdigest(value) if content_md5 == true
md5_digest = content_md5.unpack('a2'*16).collect {|i| i.hex.chr }.join
headers['Content-MD5'] = Base64.encode64(md5_digest).strip
end
if !access.nil?
headers['x-amz-acl'] = access.to_s.gsub('_', '-')
end
if !storage_class.nil?
headers['x-amz-storage-class'] = storage_class.to_s.upcase
end
if !meta.nil? && !meta.empty?
meta.each {|k,v| headers["x-amz-meta-#{k}"] = v.to_s }
end
response = bucket.connection.put(key, headers, value)
self.error = response.error
response.status == 200
end