Aws::S3::Presigner
を使います。
基本
s3 = Aws::S3::Client.new
signer = Aws::S3::Presigner.new(client: s3)
signer.presigned_url(:get_object,
bucket: 'your-bucket',
key: 'path/to/object')
URLの有効期限を設定する
たとえば、購入者に向けてダウンロード用URLを発行する場合、不正利用を防ぐためにごく短期間のURLを作りたい。
そういったときはexpires_in
で指定できる。
以下、30秒だけアクセス可能なURLの例
signer.presigned_url(:get_object,
bucket: 'your-bucket',
key: 'path/to/object',
expires_in: 30)
HTTPSにしたい
secure: true
を指定する。
signer.presigned_url(:get_object,
bucket: 'your-bucket',
key: 'path/to/object',
secure: true)
Content-Typeを指定する
たとえば、S3のファイルを直接ブラウザで開くのではなく、ダウンロードさせたいときapplication/force-download
を設定する。
S3ではresponse-content-type
をリクエストパラメータに追加して署名すれば良いみたい。
参考:
http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/API/RESTObjectGET.html
サンプルが見つからず苦労したものの、コードを読むと単に以下のようにすればよいようだった。
signer.presigned_url(:get_object,
bucket: 'your-bucket',
key: 'path/to/object',
response_content_type: 'application/force-download')
ダウンロードファイル名を指定したい(Content-Disposition)
Content-Typeの時と同様に、response_content_disposition
を指定する。
signer.presigned_url(:get_object,
bucket: 'your-bucket',
key: 'path/to/object',
response_content_disposition: 'attachment; filename=Downloadfile.pdf')