X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=lib%2Fs3_picture.rb;h=0b061579119031de7030e33e703381865b4fc95e;hb=refs%2Fheads%2Fv07;hp=c4c8a767af3fd529ca79ca5353b7975f06308355;hpb=7f1881a81f526ece69401f1147c7a56f700646f8;p=pettanr%2Fpettanr.git diff --git a/lib/s3_picture.rb b/lib/s3_picture.rb index c4c8a767..0b061579 100644 --- a/lib/s3_picture.rb +++ b/lib/s3_picture.rb @@ -1,17 +1,36 @@ 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 @@ -24,48 +43,50 @@ class PictureIO else subdir.to_s + '/' end - sd + @base_dir + '/' + sd end def exist?(filename, subdir = nil) + res = true begin - AWS::S3::S3Object.exist?(dir(subdir) + filename) - true - rescue S3Exception - false + res = self.bucket.object(dir(subdir) + filename).exists? + rescue + raise PictureIO::Error end + res end def put(bindata, filename, subdir = nil) + res = true begin - AWS::S3::S3Object.store(dir(subdir) + filename, bindata, base) - true - rescue S3Exception - false + @@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 = '' begin - bindata = '' - # if AWS::S3::S3Object.exists?(fn, 'pettanr') - AWS::S3::S3Object.stream(dir(subdir) + filename, base) do |st| + @@client.get_object(bucket: self.host_dir, key: dir(subdir) + filename) do |st| bindata += st if st end - bindata - rescue S3Exception - false + rescue + raise PictureIO::Error end + bindata end def delete(filename, subdir = nil) + res = true begin - AWS::S3::S3Object.delete(dir(subdir) + filename, base) -# true - rescue S3Exception - false + @@client.delete_object(bucket: self.host_dir, key: dir(subdir) + filename) + rescue + raise PictureIO::Error end - end + res + end end end