Class: PorkyLib::FileService
- Inherits:
-
Object
- Object
- PorkyLib::FileService
- Includes:
- Singleton
- Defined in:
- lib/porky_lib/file_service.rb
Defined Under Namespace
Classes: FileServiceError, FileSizeTooLargeError
Instance Method Summary collapse
- #read(bucket_name, file_key, options = {}) ⇒ Object
- #write(file, bucket_name, key_id, options = {}) ⇒ Object
Instance Method Details
#read(bucket_name, file_key, options = {}) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/porky_lib/file_service.rb', line 12 def read(bucket_name, file_key, = {}) tempfile = Tempfile.new begin object = s3.bucket(bucket_name).object(file_key) raise FileSizeTooLargeError, "File size is larger than maximum allowed size of #{max_file_size}" if object.content_length > max_size object.download_file(tempfile.path, ) rescue Aws::Errors::ServiceError => e raise FileServiceError, "Attempt to download a file from S3 failed.\n#{e.message}" end decrypt_file_contents(tempfile) end |
#write(file, bucket_name, key_id, options = {}) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/porky_lib/file_service.rb', line 27 def write(file, bucket_name, key_id, = {}) raise FileServiceError, 'Invalid input. One or more input values is nil' if input_invalid?(file, bucket_name, key_id) raise FileSizeTooLargeError, "File size is larger than maximum allowed size of #{max_file_size}" if file_size_invalid?(file) data = file_data(file) file_key = .key?(:directory) ? "#{options[:directory]}/#{SecureRandom.uuid}" : SecureRandom.uuid tempfile = encrypt_file_contents(data, key_id, file_key) begin perform_upload(bucket_name, file_key, tempfile, ) rescue Aws::Errors::ServiceError => e raise FileServiceError, "Attempt to upload a file to S3 failed.\n#{e.message}" end # Remove tempfile from disk tempfile.unlink file_key end |