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
- #overwrite_file(file, file_key, bucket_name, key_id, options = {}) ⇒ Object
- #read(bucket_name, file_key, options = {}) ⇒ Object
- #write(file, bucket_name, key_id, options = {}) ⇒ Object
Instance Method Details
#overwrite_file(file, file_key, bucket_name, key_id, options = {}) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/porky_lib/file_service.rb', line 46 def overwrite_file(file, file_key, bucket_name, key_id, = {}) raise FileServiceError, 'Invalid input. One or more input values is nil' if input_invalid?(file, bucket_name, key_id) raise FileServiceError, 'Invalid input. file_key cannot be nil if overwriting an existing file' if file_key.nil? raise FileSizeTooLargeError, "File size is larger than maximum allowed size of #{max_file_size}" if file_size_invalid?(file) data = file_data(file) 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.}" end # Remove tempfile from disk tempfile.unlink end |
#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.}" 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) ? "#{[: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.}" end # Remove tempfile from disk tempfile.unlink file_key end |