Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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
ただまだあげられるようになっただけなので、これから改修するべきところはいくつもあるのでそちらをやっていきます。
(上のコードだと、あげられた画像が全て同じファイル名になってしまう。。。)

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away