This is a quick post to share few easy methods to access files on AWS S3.
The below custom utility methods uses aws-sdk-s3
Firstly lets define a constant to access files on S3 -
##to manage S3 Resources
S3 = Aws::S3::Resource.new(
region: "YOUR-REGION",
access_key_id: "YOUR-AWS-KEY",
secret_access_key: "YOUR-AWS-SECRET")
##to query S3
S3_client = Aws::S3::Client.new(
access_key_id: configatron.aws.s3.credentials.access_key_id,
secret_access_key: configatron.aws.s3.credentials.secret_access_key,
region: configatron.aws.s3.region
)
Now, lets use the S3 OBJECT to access files in different ways -
1. Get all files in a S3 FOLDER
##this gives a array of file paths present in the folder specified by prefix attribute
s3objects = S3.bucket("my-output-bucket").objects({prefix: "/inputs/any-random-user-folder"}).collect(&:key)
##you can also delete the file if found
##eg: s3objects.batch_delete!
2. Check if file is present/check file content_lenght
##using head_object to just fetch required minimal details
s3object = S3_client.head_object(bucket: "MY-OUTPUT-BUCKET", key: "my-file-path")
##return boolean, if present else false
!!s3object.content_length
3. Download file from S3
data = open(any_valid_s3_url)
send_data data.read, filename: "test-download", stream: false, type: 'any-valid-content-type', disposition: 'attachment'
The above methods are live and tested on production data on RAILS 6 application.
These methods are very simple yet configurable in the way you want by
adding more dynamicity, if needed as per the use case.
We had many use cases regarding -
- Check if uploaded large file present on S3, after upload.
- If file is uploaded, especially a video file, check if there are any thumbnails present.
- If thumbnails present, show the last one else show default image
- Download a file stored on S3.
per S3 objects, but that's beyound the scope of this post.
Comments