class ElFinderS3::S3Connector

Public Class Methods

new(server) click to toggle source
# File lib/el_finder_s3/s3_connector.rb, line 8
def initialize(server)
  Aws.config.update(
    {
      region: server[:region],
      credentials: Aws::Credentials.new(server[:access_key_id], server[:secret_access_key])
    }
  )
  @bucket_name = server[:bucket_name]
  @s3_client = Aws::S3::Client.new
end

Public Instance Methods

exist?(pathname) click to toggle source

@param [ElFinderS3::Pathname] pathname

# File lib/el_finder_s3/s3_connector.rb, line 53
def exist?(pathname)
  query = {
    bucket: @bucket_name,
    key: pathname.file? ? pathname.to_file_prefix_s : pathname.to_prefix_s
  }
  begin
    @s3_client.head_object(query)
    true
  rescue Aws::S3::Errors::NotFound
    false
  end
end
get(filename) click to toggle source
# File lib/el_finder_s3/s3_connector.rb, line 91
def get(filename)
  response = @s3_client.get_object(bucket: @bucket_name, key: filename)
  return nil unless !response.nil?
  response.body
end
ls_la(pathname) click to toggle source
# File lib/el_finder_s3/s3_connector.rb, line 19
def ls_la(pathname)
  prefix = pathname.to_prefix_s
  query = {
    bucket: @bucket_name,
    delimiter: '/',
    encoding_type: 'url',
    max_keys: 100,
    prefix: prefix
  }

  response = @s3_client.list_objects(query)
  result = {
    :folders => [],
    :files => []
  }

  #Files
  response.contents.each { |e|
    if e.key != prefix
      e.key = e.key.gsub(prefix, '')
      result[:files].push(e[:key])
    end
  }
  #Folders
  response.common_prefixes.each { |f|
    if f.prefix != '' && f.prefix != prefix && f.prefix != '/'
      f.prefix = f.prefix.split('/').last
      result[:folders].push(f[:prefix])
    end
  }
  return result
end
mkdir(folder_name) click to toggle source
# File lib/el_finder_s3/s3_connector.rb, line 66
def mkdir(folder_name)
  begin
    @s3_client.put_object(bucket: @bucket_name, key: folder_name)
    true
  rescue
    false
  end
end
size(pathname) click to toggle source
# File lib/el_finder_s3/s3_connector.rb, line 97
def size(pathname)
  query = {
    bucket: @bucket_name,
    key: pathname.file? ? pathname.to_file_prefix_s : pathname.to_prefix_s
  }
  begin
    head = @s3_client.head_object(query)
    head[:content_length]
  rescue Aws::S3::Errors::NotFound
    0
  end
end
store(filename, content) click to toggle source
# File lib/el_finder_s3/s3_connector.rb, line 84
def store(filename, content)
  if content.is_a?(MiniMagick::Image)
    @s3_client.put_object(bucket: @bucket_name, key: filename, body: content.to_blob, acl: 'public-read')
  elsif @s3_client.put_object(bucket: @bucket_name, key: filename, body: content, acl: 'public-read')
  end
end
touch(filename) click to toggle source
# File lib/el_finder_s3/s3_connector.rb, line 75
def touch(filename)
  begin
    @s3_client.put_object(bucket: @bucket_name, key: filename)
    true
  rescue
    false
  end
end