Class: ICFS::StoreS3
Overview
Permanent store for items using AWS S3
Instance Method Summary collapse
-
#file_read(cid, enum, lnum, fnum) ⇒ File, Tempfile
Read a file.
-
#file_size(cid, enum, lnum, fnum) ⇒ Integer
Get a file size.
-
#file_write(cid, enum, lnum, fnum, tmpf) ⇒ Object
Write a file.
-
#initialize(client, bucket, prefix = nil) ⇒ StoreS3
constructor
New store.
-
#tempfile ⇒ Tempfile
Get a Tempfile to use to write files.
Methods inherited from Store
#action_read, #action_write, #case_read, #case_write, #close, #entry_read, #entry_write, #index_read, #index_write, #log_read, #log_write
Constructor Details
#initialize(client, bucket, prefix = nil) ⇒ StoreS3
New store
30 31 32 33 34 |
# File 'lib/icfs/store_s3.rb', line 30 def initialize(client, bucket, prefix=nil) @s3 = client @bck = bucket @base = prefix || ''.freeze end |
Instance Method Details
#file_read(cid, enum, lnum, fnum) ⇒ File, Tempfile
Read a file
40 41 42 43 44 45 46 47 48 |
# File 'lib/icfs/store_s3.rb', line 40 def file_read(cid, enum, lnum, fnum) tmp = tempfile key = _file(cid, enum, lnum, fnum) @s3.get_object( bucket: @bck, key: key, response_target: tmp) tmp.rewind return tmp rescue Aws::S3::Errors::NoSuchKey return nil end |
#file_size(cid, enum, lnum, fnum) ⇒ Integer
Get a file size
69 70 71 72 73 74 75 |
# File 'lib/icfs/store_s3.rb', line 69 def file_size(cid, enum, lnum, fnum) key = _file(cid, enum, lnum, fnum) resp = @s3.head_object( bucket: @bck, key: key ) return resp.content_length rescue Aws::S3::Errors::NotFound return nil end |
#file_write(cid, enum, lnum, fnum, tmpf) ⇒ Object
Write a file
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/icfs/store_s3.rb', line 54 def file_write(cid, enum, lnum, fnum, tmpf) key = _file(cid, enum, lnum, fnum) tmpf.rewind @s3.put_object( bucket: @bck, key: key, body: tmpf ) if tmpf.respond_to?( :close! ) tmpf.close! else tmpf.close end end |
#tempfile ⇒ Tempfile
Get a Tempfile to use to write files
81 82 83 |
# File 'lib/icfs/store_s3.rb', line 81 def tempfile Tempfile.new('tmp'.freeze, encoding: 'ascii-8bit'.freeze) end |