Class: Fog::Storage::AWS::File
- Defined in:
- lib/fog/aws/models/storage/file.rb
Instance Attribute Summary collapse
-
#body ⇒ File
Get file’s body if exists, else ‘ ’.
- #multipart_chunk_size ⇒ Object
Attributes inherited from Model
Instance Method Summary collapse
-
#acl=(new_acl) ⇒ String
Set file’s access control list (ACL).
-
#copy(target_directory_key, target_file_key, options = {}) ⇒ String
Copy object from one bucket to other bucket.
-
#destroy(options = {}) ⇒ Boolean
Destroy file via http DELETE.
-
#directory ⇒ Fog::AWS::Storage::Directory
Get the file instance’s directory.
- #metadata ⇒ Object
- #metadata=(new_metadata) ⇒ Object
- #owner=(new_owner) ⇒ Object
-
#public=(new_public) ⇒ String
Set Access-Control-List permissions.
-
#public_url ⇒ String
Get pubically acessible url via http GET.
-
#save(options = {}) ⇒ Boolean
Save file with body as contents to directory.key with name key via http PUT.
-
#url(expires, options = {}) ⇒ String
Get a url for file.
-
#versions ⇒ Fog::Storage::AWS::Version
File version if exists or creates new version.
Methods inherited from Model
#initialize, #inspect, #reload, #symbolize_keys, #to_json, #wait_for
Methods included from Attributes::ClassMethods
#_load, #aliases, #attribute, #attributes, #identity, #ignore_attributes, #ignored_attributes
Methods included from Core::DeprecatedConnectionAccessors
#connection, #connection=, #prepare_service_value
Methods included from Attributes::InstanceMethods
#_dump, #attributes, #dup, #identity, #identity=, #merge_attributes, #new_record?, #persisted?, #requires, #requires_one
Constructor Details
This class inherits a constructor from Fog::Model
Instance Attribute Details
#body ⇒ File
Get file’s body if exists, else ‘ ’.
54 55 56 57 58 59 60 |
# File 'lib/fog/aws/models/storage/file.rb', line 54 def body attributes[:body] ||= if last_modified && (file = collection.get(identity)) file.body else '' end end |
#multipart_chunk_size ⇒ Object
Chunk size to use for multipart uploads. Use small chunk sizes to minimize memory. E.g. 5242880 = 5mb
31 32 33 |
# File 'lib/fog/aws/models/storage/file.rb', line 31 def multipart_chunk_size @multipart_chunk_size end |
Instance Method Details
#acl=(new_acl) ⇒ String
Set file’s access control list (ACL).
valid acls: private, public-read, public-read-write, authenticated-read
41 42 43 44 45 46 47 |
# File 'lib/fog/aws/models/storage/file.rb', line 41 def acl=(new_acl) valid_acls = ['private', 'public-read', 'public-read-write', 'authenticated-read'] unless valid_acls.include?(new_acl) raise ArgumentError.new("acl must be one of [#{valid_acls.join(', ')}]") end @acl = new_acl end |
#copy(target_directory_key, target_file_key, options = {}) ⇒ String
Copy object from one bucket to other bucket.
required attributes: directory, key
91 92 93 94 95 96 |
# File 'lib/fog/aws/models/storage/file.rb', line 91 def copy(target_directory_key, target_file_key, = {}) requires :directory, :key service.copy_object(directory.key, key, target_directory_key, target_file_key, ) target_directory = service.directories.new(:key => target_directory_key) target_directory.files.head(target_file_key) end |
#destroy(options = {}) ⇒ Boolean
Destroy file via http DELETE.
required attributes: directory, key
107 108 109 110 111 112 |
# File 'lib/fog/aws/models/storage/file.rb', line 107 def destroy( = {}) requires :directory, :key attributes[:body] = nil if ['versionId'] == version service.delete_object(directory.key, key, ) true end |
#directory ⇒ Fog::AWS::Storage::Directory
Get the file instance’s directory.
77 78 79 |
# File 'lib/fog/aws/models/storage/file.rb', line 77 def directory @directory end |
#metadata ⇒ Object
116 117 118 |
# File 'lib/fog/aws/models/storage/file.rb', line 116 def attributes.reject {|key, value| !(key.to_s =~ /^x-amz-/)} end |
#metadata=(new_metadata) ⇒ Object
122 123 124 |
# File 'lib/fog/aws/models/storage/file.rb', line 122 def () merge_attributes() end |
#owner=(new_owner) ⇒ Object
128 129 130 131 132 133 134 135 |
# File 'lib/fog/aws/models/storage/file.rb', line 128 def owner=(new_owner) if new_owner attributes[:owner] = { :display_name => new_owner['DisplayName'], :id => new_owner['ID'] } end end |
#public=(new_public) ⇒ String
Set Access-Control-List permissions.
valid new_publics: public_read, private
145 146 147 148 149 150 151 152 |
# File 'lib/fog/aws/models/storage/file.rb', line 145 def public=(new_public) if new_public @acl = 'public-read' else @acl = 'private' end new_public end |
#public_url ⇒ String
Get pubically acessible url via http GET. Checks persmissions before creating. Defaults to s3 subdomain or compliant bucket name
required attributes: directory, key
163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/fog/aws/models/storage/file.rb', line 163 def public_url requires :directory, :key if service.get_object_acl(directory.key, key).body['AccessControlList'].detect {|grant| grant['Grantee']['URI'] == 'http://acs.amazonaws.com/groups/global/AllUsers' && grant['Permission'] == 'READ'} if directory.key.to_s =~ Fog::AWS::COMPLIANT_BUCKET_NAMES "https://#{directory.key}.s3.amazonaws.com/#{Fog::AWS.escape(key)}".gsub('%2F','/') else "https://s3.amazonaws.com/#{directory.key}/#{Fog::AWS.escape(key)}".gsub('%2F','/') end else nil end end |
#save(options = {}) ⇒ Boolean
Save file with body as contents to directory.key with name key via http PUT
required attributes: body, directory, key
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
# File 'lib/fog/aws/models/storage/file.rb', line 192 def save( = {}) requires :body, :directory, :key if != {} Fog::Logger.deprecation("options param is deprecated, use acl= instead [light_black](#{caller.first})[/]") end ['x-amz-acl'] ||= @acl if @acl ['Cache-Control'] = cache_control if cache_control ['Content-Disposition'] = content_disposition if content_disposition ['Content-Encoding'] = content_encoding if content_encoding ['Content-MD5'] = content_md5 if content_md5 ['Content-Type'] = content_type if content_type ['Expires'] = expires if expires .merge!() ['x-amz-storage-class'] = storage_class if storage_class ['x-amz-server-side-encryption'] = encryption if encryption if multipart_chunk_size && body.respond_to?(:read) data = multipart_save() merge_attributes(data.body) else data = service.put_object(directory.key, key, body, ) merge_attributes(data.headers.reject {|key, value| ['Content-Length', 'Content-Type'].include?(key)}) end self.etag.gsub!('"','') self.content_length = Fog::Storage.get_body_size(body) self.content_type ||= Fog::Storage.get_content_type(body) true end |
#url(expires, options = {}) ⇒ String
Get a url for file.
required attributes: key
230 231 232 233 |
# File 'lib/fog/aws/models/storage/file.rb', line 230 def url(expires, = {}) requires :key collection.get_url(key, expires, ) end |