Class: Fog::Aliyun::Storage::Files
- Inherits:
-
Collection
- Object
- Collection
- Fog::Aliyun::Storage::Files
- Defined in:
- lib/fog/aliyun/models/storage/files.rb
Instance Method Summary collapse
- #all(options = {}) ⇒ Object
-
#check_directory_key(directory_key) ⇒ Object
check_directory_key have two functions: 1.
- #each ⇒ Object
- #each_file_this_page ⇒ Object
- #get(key, options = {}, &block) ⇒ Object
- #get_http_url(key, expires, options = {}) ⇒ Object
- #get_https_url(key, expires, options = {}) ⇒ Object
- #get_url(key) ⇒ Object
- #head(key, _options = {}) ⇒ Object
- #new(attributes = {}) ⇒ Object
Instance Method Details
#all(options = {}) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 49 def all( = {}) requires :directory = { 'delimiter' => delimiter, 'marker' => marker, 'max-keys' => max_keys.to_i, 'prefix' => prefix }.merge!() = .reject {|key,value| value.nil? || value.to_s.empty?} merge_attributes() parent = directory.collection.get( directory.key, ) if parent merge_attributes(parent.files.attributes) load(parent.files.map {|file| file.attributes}) else nil end end |
#check_directory_key(directory_key) ⇒ Object
check_directory_key have two functions:
-
trim the directory_key suffix ‘/’
-
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.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 28 def check_directory_key(directory_key) bucket_name = nil if directory_key.is_a? Array directory_key = directory_key[0] end 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 elsif service.bucket_exists?(directory_key) bucket_name = directory_key directory_key = '' else directory_key end end return bucket_name, directory_key end |
#each ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 72 def each if !block_given? self else subset = dup.all subset.each_file_this_page { |f| yield f } while subset.length == (subset.limit || 10_000) subset = subset.all(marker: subset.last.key) subset.each_file_this_page { |f| yield f } end self end end |
#each_file_this_page ⇒ Object
71 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 71 alias each_file_this_page each |
#get(key, options = {}, &block) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 88 def get(key, = {}, &block) requires :directory bucket_name, directory_key = check_directory_key(directory.key) object = if directory_key == '' key else directory_key + '/' + key end begin data = service.get_object(object, .merge({bucket: bucket_name}), &block) headers = data.headers lastModified = headers[:last_modified] last_modified = (Time.parse(lastModified).localtime if !lastModified.nil? && lastModified != '') date = headers[:date] date = (Time.parse(date).localtime if !date.nil? && date != '') file_data = { body: data.body, content_length: headers[:content_length].to_i, key: key, last_modified: last_modified, content_type: headers[:content_type], etag: headers[:etag], date: date, connection: headers[:connection], accept_ranges: headers[:accept_ranges], server: headers[:server], object_type: headers[:x_oss_object_type] } new(file_data) rescue AliyunOssSdk::ServerError => error case error.error_code when %r{NoSuchKey},%r{SymlinkTargetNotExist} nil else raise(error) end end end |
#get_http_url(key, expires, options = {}) ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 140 def get_http_url(key, expires, = {}) requires :directory bucket_name, directory_key = check_directory_key(directory.key) object = if directory_key == '' key else directory_key + '/' + key end expires = expires.nil? ? 0 : expires.to_i service.get_object_http_url_public(object, expires, .merge(bucket: bucket_name)) end |
#get_https_url(key, expires, options = {}) ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 152 def get_https_url(key, expires, = {}) requires :directory bucket_name, directory_key = check_directory_key(directory.key) object = if directory_key == '' key else directory_key + '/' + key end expires = expires.nil? ? 0 : expires.to_i service.get_object_https_url_public(object, expires, .merge(bucket: bucket_name)) end |
#get_url(key) ⇒ Object
129 130 131 132 133 134 135 136 137 138 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 129 def get_url(key) requires :directory bucket_name, directory_key = check_directory_key(directory.key) object = if directory_key == '' key else directory_key + '/' + key end service.get_object_http_url_public(object, 3600, bucket: bucket_name) end |
#head(key, _options = {}) ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 164 def head(key, = {}) requires :directory bucket_name, directory_key = check_directory_key(directory.key) object = if directory_key == '' key else directory_key + '/' + key end data = service.head_object(object, bucket: bucket_name).data return nil if data[:status] == 404 lastModified = data[:headers]['Last-Modified'] last_modified = (Time.parse(lastModified).localtime if !lastModified.nil? && lastModified != '') date = data[:headers]['Date'] date = (Time.parse(date).localtime if !date.nil? && date != '') file_data = { content_length: data[:headers]['Content-Length'].to_i, key: key, last_modified: last_modified, content_type: data[:headers]['Content-Type'], etag: data[:headers]['ETag'], date: date, connection: data[:headers]['Connection'], accept_ranges: data[:headers]['Accept-Ranges'], server: data[:headers]['Server'], object_type: data[:headers]['x-oss-object-type'] } new(file_data) rescue Fog::Aliyun::Storage::NotFound nil end |
#new(attributes = {}) ⇒ Object
197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/fog/aliyun/models/storage/files.rb', line 197 def new(attributes = {}) requires :directory # Sometimes, the v will be a Array, like "Prefix"=>[{}], "Marker"=>[xxxx], "MaxKeys"=>["100"], "IsTruncated"=>["false"] # and there needs to parse them for k, v in attributes if !v.nil? && (v.is_a? Array) && (v.size > 0) attributes[k] = v[0] end end super({ directory: directory }.merge!(attributes)) end |