Class: Fog::Storage::AWS::File
- Inherits:
-
Model
- Object
- Model
- 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
Instance Method Summary collapse
- #acl ⇒ Object
-
#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? ⇒ Boolean
-
#public_url ⇒ String
Get publicly accessible 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.
Instance Attribute Details
#body ⇒ File
Get file’s body if exists, else ‘ ’.
56 57 58 59 60 61 62 |
# File 'lib/fog/aws/models/storage/file.rb', line 56 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
30 31 32 |
# File 'lib/fog/aws/models/storage/file.rb', line 30 def multipart_chunk_size @multipart_chunk_size end |
Instance Method Details
#acl ⇒ Object
32 33 34 35 |
# File 'lib/fog/aws/models/storage/file.rb', line 32 def acl requires :directory, :key service.get_object_acl(directory.key, key).body['AccessControlList'] end |
#acl=(new_acl) ⇒ String
Set file’s access control list (ACL).
valid acls: private, public-read, public-read-write, authenticated-read, bucket-owner-read, bucket-owner-full-control
44 45 46 47 48 49 50 |
# File 'lib/fog/aws/models/storage/file.rb', line 44 def acl=(new_acl) valid_acls = ['private', 'public-read', 'public-read-write', 'authenticated-read', 'bucket-owner-read', 'bucket-owner-full-control'] 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
90 91 92 93 94 95 |
# File 'lib/fog/aws/models/storage/file.rb', line 90 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
105 106 107 108 109 110 |
# File 'lib/fog/aws/models/storage/file.rb', line 105 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
113 114 115 |
# File 'lib/fog/aws/models/storage/file.rb', line 113 def attributes.reject {|key, value| !(key.to_s =~ /^x-amz-/)} end |
#metadata=(new_metadata) ⇒ Object
118 119 120 |
# File 'lib/fog/aws/models/storage/file.rb', line 118 def () merge_attributes() end |
#owner=(new_owner) ⇒ Object
123 124 125 126 127 128 129 130 |
# File 'lib/fog/aws/models/storage/file.rb', line 123 def owner=(new_owner) if new_owner attributes[:owner] = { :display_name => new_owner['DisplayName'] || new_owner[:display_name], :id => new_owner['ID'] || new_owner[:id] } end end |
#public=(new_public) ⇒ String
Set Access-Control-List permissions.
valid new_publics: public_read, private
143 144 145 146 147 148 149 150 |
# File 'lib/fog/aws/models/storage/file.rb', line 143 def public=(new_public) if new_public @acl = 'public-read' else @acl = 'private' end new_public end |
#public? ⇒ Boolean
132 133 134 |
# File 'lib/fog/aws/models/storage/file.rb', line 132 def public? acl.any? {|grant| grant['Grantee']['URI'] == 'http://acs.amazonaws.com/groups/global/AllUsers' && grant['Permission'] == 'READ'} end |
#public_url ⇒ String
Get publicly accessible url via http GET. Checks permissions before creating. Defaults to s3 subdomain or compliant bucket name
required attributes: directory, key
160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/fog/aws/models/storage/file.rb', line 160 def public_url requires :directory, :key if public? service.request_url( :bucket_name => directory.key, :object_name => key ) 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
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/fog/aws/models/storage/file.rb', line 188 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
225 226 227 228 |
# File 'lib/fog/aws/models/storage/file.rb', line 225 def url(expires, = {}) requires :key collection.get_url(key, expires, ) end |