0
0

More than 1 year has passed since last update.

RubyでS3のファイルを別名でダウンロードするためのPresigned URLを取得する

Posted at

背景

同一名のファイルをアップロードしたときにS3上でファイル名が衝突しないようにS3にはアップロード時のファイル名とは別名でアップロードしており、
S3のkeyとアップロード時のファイル名をテーブルで保持している。

Presigned URLを発行してそのままダウンロードするとS3にアップロードしたファイル名でダウンロードされる。
S3アップロード時のファイル名は衝突回避のため複雑なランダム文字列にしているためファイル名が分かりづらく、ファイルアップロード時の名前でダウンロードしたいモチベーションがあった。

対応内容

region = "{{your region}}"
bucket = "{{your bucket}}"
file_key = "{{your s3 file key}}"
file_name = "{{ダウンロード時に指定したいファイル名}}"
encoded_file_name = ERB::Util.url_encode(file_name) # 日本語のファイル名対応

aws_s3_client = Aws::S3::Client.new(region: region)
aws_s3_resource = Aws::S3::Resource.new(client: aws_s3_client)
aws_s3_bucket = aws_s3_resource.bucket(bucket)
aws_s3_object = aws_s3_bucket.object(file_key)

response_content_disposition = "attachment; filename=#{encoded_file_name}"
aws_s3_object.presigned_url(:get, response_content_disposition: response_content_disposition)

日本語対応のためにurl_encodeをする必要があった。
IEでの確認はとってないですが多分IE対応するならもっとエンコードのパターンを分けないとダメそうな感じはしました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0