lib/carrierwave/storage/fog.rb in carrierwave-2.0.2 vs lib/carrierwave/storage/fog.rb in carrierwave-2.1.0

- old
+ new

@@ -159,10 +159,12 @@ self.class.connection_cache[credentials] ||= ::Fog::Storage.new(options) end end class File + DEFAULT_S3_REGION = 'us-east-1' + include CarrierWave::Utilities::Uri ## # Current local path to file # @@ -192,11 +194,11 @@ # [String] temporary authenticated url # or # [NilClass] no authenticated url available # def authenticated_url(options = {}) - if ['AWS', 'Google', 'Rackspace', 'OpenStack', 'AzureRM', 'Aliyun'].include?(@uploader.fog_credentials[:provider]) + if ['AWS', 'Google', 'Rackspace', 'OpenStack', 'AzureRM', 'Aliyun', 'backblaze'].include?(@uploader.fog_credentials[:provider]) # avoid a get by using local references local_directory = connection.directories.new(:key => @uploader.fog_directory) local_file = local_directory.files.new(:key => path) expire_at = options[:expire_at] || ::Fog::Time.now + @uploader.fog_authenticated_url_expiration case @uploader.fog_credentials[:provider] @@ -382,12 +384,18 @@ # if directory is a valid subdomain, use that style for access if valid_subdomain s3_subdomain = @uploader.fog_aws_accelerate ? "s3-accelerate" : "s3" "#{protocol}://#{@uploader.fog_directory}.#{s3_subdomain}.amazonaws.com/#{encoded_path}" - else - # directory is not a valid subdomain, so use path style for access - "#{protocol}://s3.amazonaws.com/#{@uploader.fog_directory}/#{encoded_path}" + else # directory is not a valid subdomain, so use path style for access + region = @uploader.fog_credentials[:region].to_s + host = case region + when DEFAULT_S3_REGION, '' + 's3.amazonaws.com' + else + "s3.#{region}.amazonaws.com" + end + "#{protocol}://#{host}/#{@uploader.fog_directory}/#{encoded_path}" end end when 'Google' # https://cloud.google.com/storage/docs/access-public-data "https://storage.googleapis.com/#{@uploader.fog_directory}/#{encoded_path}"