diff --git a/lib/fog/aws/models/s3/directories.rb b/lib/fog/aws/models/s3/directories.rb index 384457ef2..f55b65a3e 100644 --- a/lib/fog/aws/models/s3/directories.rb +++ b/lib/fog/aws/models/s3/directories.rb @@ -42,10 +42,12 @@ module Fog end end directory.files.merge_attributes(options) - directory.files.instance_variable_set(:@loaded, true) - data['Contents'].each do |file| - directory.files << directory.files.new(file) + files = data['Contents'] + while data['IsTruncated'] + data = connection.get_bucket(name, options.merge!('marker' => files.last['Key'])).body + files.concat(data['Contents']) end + directory.files.load(files) directory rescue Excon::Errors::NotFound nil diff --git a/lib/fog/aws/models/s3/files.rb b/lib/fog/aws/models/s3/files.rb index 80434fab2..6f213352f 100644 --- a/lib/fog/aws/models/s3/files.rb +++ b/lib/fog/aws/models/s3/files.rb @@ -39,6 +39,7 @@ module Fog 'max-keys' => @max_keys, 'prefix' => @prefix }.merge!(options) + options = options.reject {|key,value| value.nil? || value.empty?} data = connection.get_object(directory.name, key, options, &block) file_data = { :body => data.body, diff --git a/lib/fog/aws/requests/s3/get_bucket.rb b/lib/fog/aws/requests/s3/get_bucket.rb index 78fd9db5e..75004e452 100644 --- a/lib/fog/aws/requests/s3/get_bucket.rb +++ b/lib/fog/aws/requests/s3/get_bucket.rb @@ -38,6 +38,7 @@ module Fog unless bucket_name raise ArgumentError.new('bucket_name is required') end + options.reject! {|key, value| !['prefix', 'marker', 'max-keys', 'delimiter'].include?(key)} query = '' for key, value in options query << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')};"