Class: Fog::Aliyun::Storage::File

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#bodyObject



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/fog/aliyun/models/storage/file.rb', line 50

def body
  return attributes[:body] if attributes[:body]
  return '' unless last_modified

  file = collection.get(identity)
  if file
    attributes[:body] = file.body
  else
    attributes[:body] = ''
  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/aliyun/models/storage/file.rb', line 31

def multipart_chunk_size
  @multipart_chunk_size
end

Instance Method Details

#aclObject



37
38
39
40
# File 'lib/fog/aliyun/models/storage/file.rb', line 37

def acl
  requires :directory, :key
  service.get_object_acl(directory.key, key)
end

#acl=(new_acl) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/fog/aliyun/models/storage/file.rb', line 42

def acl=(new_acl)
  valid_acls = ['private', 'public-read', 'public-read-write', 'default']
  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::Aliyun::Files#head status of directory contents



79
80
81
82
83
84
# File 'lib/fog/aliyun/models/storage/file.rb', line 79

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 = {}) ⇒ Object



86
87
88
89
90
91
92
# File 'lib/fog/aliyun/models/storage/file.rb', line 86

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

#directoryObject



66
67
68
# File 'lib/fog/aliyun/models/storage/file.rb', line 66

def directory
  @directory
end

#metadataObject



95
96
97
# File 'lib/fog/aliyun/models/storage/file.rb', line 95

def 
  attributes.reject {|key, value| !(key.to_s =~ /^x-oss-/)}
end

#metadata=(new_metadata) ⇒ Object



100
101
102
# File 'lib/fog/aliyun/models/storage/file.rb', line 100

def metadata=()
  merge_attributes()
end

#owner=(new_owner) ⇒ Object



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

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

Parameters:

  • new_public (String)

Returns:

  • (String)

    new_public



121
122
123
124
125
126
127
128
# File 'lib/fog/aliyun/models/storage/file.rb', line 121

def public=(new_public)
  if new_public
    @acl = 'public-read'
  else
    @acl = 'private'
  end
  new_public
end

#save(options = {}) ⇒ Object



143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/fog/aliyun/models/storage/file.rb', line 143

def save(options = {})
  requires :body, :directory, :key
  options['x-oss-object-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!()

  self.multipart_chunk_size = 5242880 if !multipart_chunk_size && Fog::Storage.get_body_size(body) > 5368709120
  if multipart_chunk_size && Fog::Storage.get_body_size(body) >= multipart_chunk_size && body.respond_to?(:read)
    multipart_save(options)
  else
    service.put_object(directory.key, key, body, options)
  end
  self.etag = self.etag.gsub('"','') if self.etag
  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: directory, key

Parameters:

  • expires (String)

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

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

    No need to use

Returns:

  • (String)

    url



138
139
140
141
# File 'lib/fog/aliyun/models/storage/file.rb', line 138

def url(expires, options = {})
  requires :key
  service.get_object_http_url_public(directory.key, key, expires)
end