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}"