LoginSignup
0
0

More than 5 years have passed since last update.

ローカルディレクトリにある画像ファイルをS3にぶち込むコード

Posted at

rmagickで生成した画像をS3にあげたい

carrierwaveを利用すればええやんと思ったのですが、今回は利用していません。
サービスの機能として、アップロードする際にモーダルからファイルを選んで投稿。。。。とかではなく、インスタンスをsaveするタイミングで、画像も同時に生成されるようにしたかったからです。つまりよくあるファイルを選んでください。
みたいなものはないわけです。
せっかくなんでcarrierwaveを使わずにやってみたいというのもありましたので、
・carrierwaveを使わない
・インスタンスがsaveされた段階で、そのインスタンスのもつtitleカラムやauthorカラムが画像処理され、awsのバケットに入る
みたいなことをやってみました。

実際の作業とコード

今回はバケットがすでに生成されていること前提です。

まずは2つのgemをインストール
dotenvはセキュリティのため、aws-sdkはrubyからawsを操作できるようにするgemです。

bundle install
gem 'dotenv'
gem 'aws-sdk'

次にモデルの方に記述。

sample.rb
require 'aws-sdk'

def upload_aws
    Aws.config.update({
    credentials: Aws::Credentials.new(ENV['ACCESS_KEY_ID'], ENV['SECRET_ACCESS_KEY'])})
    s3 = Aws::S3::Resource.new(region: 'ap-northeast-1')
    bucket = s3.bucket('bucket')
    object = bucket.object('object.png')
    object.upload_file("object_img.png")
end

requireは必須ぽい。ドキュメントに書いてあります。
ENVを使って実際のkeyは.envファイルに逃す。あとは普通にインスタンスを生成してメソッド追加していくだけです。(格納するオブジェクトを生成する。)
リージョンは東京。
最後のobject_img.pngがrmagickで生成されている画像です。
最終的にその画像がバケット内に格納されます。

感想

自分今までaws苦手意識がありましたが、今回で少し理解できたような気がしました。(上のコード実装できたとき気持ちよかった)
あとドキュメントをちゃんと読む、一次情報に当たることが大切だと気づけました。色々な参考webページもあったんですが、awsの仕様がどんどん更新されており、古くなっている気がしています。。。
=> 特にここのドキュメントを参考にしました。アマゾン公式です。
https://docs.aws.amazon.com/ja_jp/sdk-for-ruby/v3/developer-guide/hello.html
ただまだあげられるようになっただけなので、これから改修するべきところはいくつもあるのでそちらをやっていきます。
(上のコードだと、あげられた画像が全て同じファイル名になってしまう。。。)

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