OSDN Git Service

fix:error dlg
[pettanr/pettanr.git] / lib / s3_picture.rb
index f6d7bf8..0b06157 100644 (file)
@@ -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,45 +43,50 @@ class PictureIO
       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