Рекомендуемый способ создания предопределенного URL для S3 Bucket в Ruby
Я пытаюсь создать предварительно подписанный URL-адрес на моем сервере Rails для отправки в браузер, чтобы браузер мог загрузить его на S3.
Это похоже на aws-sdk-s3
это драгоценный камень, который нужно использовать для продвижения вперед. Но, к сожалению, я не сталкивался с документацией для драгоценного камня, которая обеспечила бы ясность. Кажется, есть несколько разных способов сделать это, и мы будем благодарны за любые указания относительно различий в следующих методах:
С помощью
Aws::S3::Presigner.new
( https://github.com/aws/aws-sdk-ruby/blob/master/aws-sdk-core/lib/aws-sdk-core/s3/presigner.rb), но, похоже, не принимает параметр объекта или аутентификационные данные.С помощью
Aws::S3::Resource.new
, но, похоже,aws-sdk-resources
не будет поддерживаться. ( https://aws.amazon.com/blogs/developer/upgrading-from-version-2-to-version-3-of-the-aws-sdk-for-ruby-2/)С помощью
Aws::S3::Object.new
а затем позвонивput
метод на этом объекте.С помощью
AWS::SigV4
непосредственно.
Мне интересно, как они отличаются, и последствия выбора одного над другим? Любые рекомендации высоко ценятся, особенно с aws-sdk-s3
,
Спасибо!
2 ответа
Итак, благодаря подсказкам @strognjz, приведенным выше, вот что сработало для меня, используя `aws-sdk-s3'.
require 'aws-sdk-s3'
#credentials below for the IAM user I am using
s3 = Aws::S3::Client.new(
region: 'us-west-2', #or any other region
access_key_id: AWS_ACCESS_KEY_ID,
secret_access_key: AWS_SECRET_ACCESS_KEY
)
signer = Aws::S3::Presigner.new(client: s3)
url = signer.presigned_url(
:put_object,
bucket: S3_BUCKET_NAME,
key: "${filename}-#{SecureRandom.uuid}"
)
Это будет работать с использованием гема aws-sdk-s3
aws_client = Aws::S3::Client.new(
region: 'us-west-2', #or any other region
access_key_id: AWS_ACCESS_KEY_ID,
secret_access_key: AWS_SECRET_ACCESS_KEY
)
s3 = Aws::S3::Resource.new(client: aws_client)
bucket = s3.bucket('bucket-name')
obj = bucket.object("${filename}-#{SecureRandom.uuid}")
url = obj.presigned_url(:put)
дополнительные глаголы http:
obj.presigned_url(:put)
obj.presigned_url(:head)
obj.presigned_url(:delete)