Class: Fog::Storage::AWS::File

Inherits:
Model
  • Object
show all
Defined in:
lib/fog/aws/models/storage/file.rb

Instance Attribute Summary collapse

Attributes inherited from Model

#collection, #service

Instance Method Summary collapse

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

#bodyFile

Get file’s body if exists, else ‘ ’.

Returns:



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_sizeObject

Note:

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

Parameters:

  • new_acl (String)

    one of valid options

Returns:



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

Parameters:

  • target_directory_key (String)
  • target_file_key (String)
  • options (Hash) (defaults to: {})

    options for copy_object method

Returns:

  • (String)

    Fog::AWS::Files#head status of directory contents



91
92
93
94
95
96
# File 'lib/fog/aws/models/storage/file.rb', line 91

def copy(target_directory_key, target_file_key, options = {})
  requires :directory, :key
  service.copy_object(directory.key, key, target_directory_key, target_file_key, options)
  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

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • versionId (Object)

Returns:

  • (Boolean)

    true if successful



107
108
109
110
111
112
# File 'lib/fog/aws/models/storage/file.rb', line 107

def destroy(options = {})
  requires :directory, :key
  attributes[:body] = nil if options['versionId'] == version
  service.delete_object(directory.key, key, options)
  true
end

#directoryFog::AWS::Storage::Directory

Get the file instance’s directory.

Returns:

  • (Fog::AWS::Storage::Directory)


77
78
79
# File 'lib/fog/aws/models/storage/file.rb', line 77

def directory
  @directory
end

#metadataObject



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 metadata=()
  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

Parameters:

Returns:



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_urlString

Get pubically acessible url via http GET. Checks persmissions before creating. Defaults to s3 subdomain or compliant bucket name

required attributes: directory, key

Returns:



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

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • acl (String)

    sets x-amz-acl HTTP header. Valid values include, private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control

  • cache_controle (String)

    sets Cache-Control header. For example, ‘No-cache’

  • content_disposition (String)

    sets Content-Disposition HTTP header. For exampple, ‘attachment; filename=testing.txt’

  • content_encoding (String)

    sets Content-Encoding HTTP header. For example, ‘x-gzip’

  • content_md5 (String)

    sets Content-MD5. For example, ‘79054025255fb1a26e4bc422aef54eb4’

  • content_type (String)

    Content-Type. For example, ‘text/plain’

  • expires (String)

    sets number of seconds before AWS Object expires.

  • storage_class (String)

    sets x-amz-storage-class HTTP header. Defaults to ‘STANDARD’. Or, ‘REDUCED_REDUNDANCY’

  • encryption (String)

    sets HTTP encryption header. Set to ‘AES256’ to encrypt files at rest on S3

Returns:

  • (Boolean)

    true if no errors



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(options = {})
  requires :body, :directory, :key
  if options != {}
    Fog::Logger.deprecation("options param is deprecated, use acl= instead [light_black](#{caller.first})[/]")
  end
  options['x-amz-acl'] ||= @acl if @acl
  options['Cache-Control'] = cache_control if cache_control
  options['Content-Disposition'] = content_disposition if content_disposition
  options['Content-Encoding'] = content_encoding if content_encoding
  options['Content-MD5'] = content_md5 if content_md5
  options['Content-Type'] = content_type if content_type
  options['Expires'] = expires if expires
  options.merge!()
  options['x-amz-storage-class'] = storage_class if storage_class
  options['x-amz-server-side-encryption'] = encryption if encryption

  if multipart_chunk_size && body.respond_to?(:read)
    data = multipart_save(options)
    merge_attributes(data.body)
  else
    data = service.put_object(directory.key, key, body, options)
    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

Parameters:

  • expires (String)

    number of seconds (since 1970-01-01 00:00) before url expires

  • options (Hash) (defaults to: {})

Returns:



230
231
232
233
# File 'lib/fog/aws/models/storage/file.rb', line 230

def url(expires, options = {})
  requires :key
  collection.get_url(key, expires, options)
end

#versionsFog::Storage::AWS::Version

File version if exists or creates new version.



239
240
241
242
243
244
245
246
# File 'lib/fog/aws/models/storage/file.rb', line 239

def versions
  @versions ||= begin
    Fog::Storage::AWS::Versions.new(
      :file         => self,
      :service   => service
    )
  end
end