t-sanoブログ

メモです。マイペースにアウトプットします。

S3にファイルを直接アップロードする(署名付きURL)

目的

サーバから署名付きURLを発行し、クライアントは署名付きURLを利用してファイルをアップロードする

環境

目指す構成

f:id:t-sanox:20160814161940p:plain

検証

署名付きURLの発行

gemはAWS-SDKを利用した。

gem 'aws-sdk'

下記のコードで署名付きURLを発行することができた。

Aws.config.update({
    region: ENV['REGION'],
    credentials: Aws::Credentials.new(ENV['KEY_ID'], ENV['KEY'])
  })
s3_bucket = Aws::S3::Resource.new.bucket(ENV['BUCKET'])

path = 'バケットに配置する際のパス(ファイル名を含む)'
s3_bucket.object(path).presigned_url(:put, expires_in: 'URLの有効期限')

ファイルのアップロード

発行した署名付きURLに対して、ファイルデータを送ってみると、ファイルがアップロードされていた。

curl -X PUT -d @hoge.json '署名付きURL'