lib/fog/aliyun/models/storage/files.rb in fog-aliyun-0.3.7 vs lib/fog/aliyun/models/storage/files.rb in fog-aliyun-0.3.8

- old
+ new

@@ -13,13 +13,42 @@ attribute :path attribute :prefix model Fog::Storage::Aliyun::File + # check_directory_key have two functions: + # 1. trim the directory_key suffix '/' + # 2. checking whether the directory_key is a bucket. + # If so, it will return directly to avoid to create a new redundant folder named with directory_key. + # This point will be applied to multi-bucket and make bucket as a directory scenario. + def check_directory_key(directory_key) + if directory_key != '' + # trim the suffix '/' + directory_key = directory_key.chomp('/') + # The bucket name can not contain '/', so if directory_key, return directory. + if directory_key.include? '/' + directory_key + else + data = service.get_bucket(directory_key) + puts "[DEBUG] Getting the bucket named with directory name #{directory_key}..." + if data.class == Hash && data.key?('Code') && !data['Code'].nil? && !data['Code'].empty? + puts "[INFO] The directory name #{directory_key} is not a bucket and will create one folder named with it." + directory_key + else + puts "[INFO] The directory name #{directory_key} is a bucket and store objects directly." + '' + end + end + else + '' + end + end + def all(_options = {}) requires :directory - prefix = directory.key + '/' if directory.key != '' && directory.key != '.' && !directory.key.nil? + directory_key = check_directory_key(directory.key) + prefix = directory_key + '/' if directory_key != '' && directory_key != '.' && !directory_key.nil? files = service.list_objects(prefix: prefix)['Contents'] return if files.nil? data = [] i = 0 files.each do |file| @@ -57,14 +86,15 @@ end end def get(key) requires :directory - object = if directory.key == '' + directory_key = check_directory_key(directory.key) + object = if directory_key == '' key else - directory.key + '/' + key + directory_key + '/' + key end begin data = service.get_object(object) rescue StandardError => error case error.response.body @@ -125,45 +155,49 @@ new(file_data) end def get_url(key) requires :directory - object = if directory.key == '' + directory_key = check_directory_key(directory.key) + object = if directory_key == '' key else - directory.key + '/' + key + directory_key + '/' + key end service.get_object_http_url_public(object, 3600) end def get_http_url(key, expires, options = {}) requires :directory - object = if directory.key == '' + directory_key = check_directory_key(directory.key) + object = if directory_key == '' key else - directory.key + '/' + key + directory_key + '/' + key end expires = expires.nil? ? 0 : expires.to_i service.get_object_http_url_public(object, expires, options) end def get_https_url(key, expires, options = {}) requires :directory - object = if directory.key == '' + directory_key = check_directory_key(directory.key) + object = if directory_key == '' key else - directory.key + '/' + key + directory_key + '/' + key end expires = expires.nil? ? 0 : expires.to_i service.get_object_https_url_public(object, expires, options) end def head(key, _options = {}) requires :directory - object = if directory.key == '' + directory_key = check_directory_key(directory.key) + object = if directory_key == '' key else - directory.key + '/' + key + directory_key + '/' + key end data = service.head_object(object).data return nil if data[:status] == 404 lastModified = data[:headers]['Last-Modified'] last_modified = (Time.parse(lastModified).localtime if !lastModified.nil? && lastModified != '')