require 'picture_io'
-require 'aws/s3'
class PictureIO
+ Aws.config.update(
+ region: Rails.application.secrets.aws_region,
+ credentials: Aws::Credentials.new(
+ Rails.application.secrets.aws_access_key_id,
+ Rails.application.secrets.aws_secret_access_key
+ )
+ )
class S3Picture
- def initialize base_dir = 'pettanr'
- @base = base_dir
+ @@client = Aws::S3::Client.new
+
+ def initialize host_dir = 'pettanr', base_dir = ''
+ @host_dir = host_dir
+ @base_dir = base_dir
+ s3 = Aws::S3::Resource.new
+ @bucket = s3.bucket(@host_dir)
+ end
+
+ def self.client
+ @@client
end
- def base
- @base
+ def bucket
+ @bucket
end
- def base=(b)
- @base = b
+ def host_dir
+ @host_dir
+ end
+
+ def host_dir=(d)
+ @host_dir = d
end
def self.subdirs
else
subdir.to_s + '/'
end
- sd
+ @base_dir + '/' + sd
+ end
+
+ def exist?(filename, subdir = nil)
+ res = true
+ begin
+ res = self.bucket.object(dir(subdir) + filename).exists?
+ rescue
+ raise PictureIO::Error
+ end
+ res
end
def put(bindata, filename, subdir = nil)
- AWS::S3::S3Object.store(dir(subdir) + filename, bindata, base)
+ res = true
+ begin
+ @@client.put_object(bucket: self.host_dir, key: dir(subdir) + filename, body: bindata)
+ rescue
+ raise PictureIO::Error
+ end
+ res
end
def get(filename, subdir = nil)
bindata = ''
- # if AWS::S3::S3Object.exists?(fn, 'pettanr')
- AWS::S3::S3Object.stream(dir(subdir) + filename, base) do |st|
- bindata += st if st
+ begin
+ @@client.get_object(bucket: self.host_dir, key: dir(subdir) + filename) do |st|
+ bindata += st if st
+ end
+ rescue
+ raise PictureIO::Error
end
bindata
end
- def store(dt)
- iw, ih = Image.fix_size_both(80, 80, dt.columns, dt.rows)
- n = dt.to_blob
- v = dt.flip.to_blob
- h = dt.flop.to_blob
- vh = dt.flip.flop.to_blob
- AWS::S3::S3Object.store(filename, n, 'pettanr')
- AWS::S3::S3Object.store('v/' + filename, v, 'pettanr') if v
- AWS::S3::S3Object.store('h/' + filename, h, 'pettanr') if h
- AWS::S3::S3Object.store('vh/' + filename, vh, 'pettanr') if vh
-
- t = Image.resize(dt.to_blob, iw, ih).to_blob
- AWS::S3::S3Object.store('thumbnail/' + filename, t, 'pettanr')
- end
-
- def restore(turn)
- dt = ''
- # if AWS::S3::S3Object.exists?(fn, 'pettanr')
- d = turn ? "#{turn}/" : ''
- AWS::S3::S3Object.stream(d + filename, 'pettanr') do |st|
- dt += st if st
+ def delete(filename, subdir = nil)
+ res = true
+ begin
+ @@client.delete_object(bucket: self.host_dir, key: dir(subdir) + filename)
+ rescue
+ raise PictureIO::Error
end
- dt
- end
+ res
+ end
+
end
end