ブラウザがS3にアップロードできるように、Railsサーバーで事前に署名されたURLを生成してブラウザに送信しようとしています。
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
の場合、推奨事項は大歓迎です。
ありがとうございました!
したがって、上記の@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-s3gemを使用して機能します
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)
obj.presigned_url(:put)
obj.presigned_url(:head)
obj.presigned_url(:delete)