BackEnd

RailsでS3に画像をアップロードする

投稿日:

はじめに

先日Railsアプリケーション上からS3に画像をアップロードする処理を実装しましたので、手順をまとめます。

 

今回やりたいこと

  1. レコード生成時にファイルを指定してアップロードする
  2. 画像のファイル名を変更する
  3. アップロード時に画像を一定サイズ内に収める
  4. アップロード時にサムネイル画像を作成する
  5. 画像の保存先、一時保存先を変更する
  6. S3にアップロードする

 

下準備

ImageMagickをインストールする

実装を始める前にImageMagickをインストールします(ImageMagickは画像のリサイズとサムネイル作成で使います)
Macで実装することを前提にしていますので、Homebrewをインストールしておいてください。

ターミナルで以下のコマンドを実行します。

 

Gemをインストールする

次に必要なGemを追加してbundle installします。

 

レコード生成時にファイルを指定してアップロードする

アップローダを作成する

下記のコマンドを実行し、アップローダを作成します。

 

このコマンドを実行すると/app/uploaders/photo_uploader.rbが作成されます。

 

モデルにアップローダを関連付ける

次に画像をアップロードしたいモデルにアップローダを関連付けます。

 

これにより、レコードを保存した際に自動的に画像がアップロードされるようになります。

 

フォームを作成する

最後に画像をアップロードするフォームを実装します。
(レコードの保存に失敗した場合、profile_image_cacheにアップロードした画像情報が格納されます)

 

アップロード時のオプション

画像のファイル名を変更する

PhotoUploaderに下記のメソッドを追加します。

 

ファイル名を変更する際の注意点としては、
submitしてからレコードが保存されてアップロードした画像がリネームされるまでに上記のfilenameメソッドが複数回呼ばれるため、
ファイル名にランダム文字列を含める場合レコードに保存されたファイル名と実際のファイル名が変わってしまいます。
そのため、一度インスタンス変数に格納するなど工夫する必要があります。

 

アップロード時に画像を一定サイズ内に収める

PhotoUploaderに下記の設定を追加します。

 

この設定では、アスペクト比を保ったまた縮小されます。

 

アップロード時にサムネイル画像を作成する

PhotoUploaderに下記の設定を追加します。

 

サムネイル画像へのアクセスは下記の通りです。

 

画像の保存先、一時保存先を変更する

画像の保存先の変更は下記の通りです。

 

サムネイルの保存先の変更は下記の通りです。

 

画像の一時保存先の変更は下記の通りです。

 

サムネイルも保存先の変更と同様にブロックの中に記述します。

 

S3にアップロードする

initializerの設定を行います。
/initializers/carrierwave.rbを作成し、下記の通り設定を記述します。

 

さいごに

CarrierWaveを使って画像をアップロードする方法をまとめました。
一般的な使い方であれば、CarrierWaveを使って簡単に実装できると思います。

age_footer_300rect




age_footer_300rect




-BackEnd

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

PHP、Ruby、Pythonのfor構文を比較してみた

1 はじめに1.1 環境2 ドキュメント2.1 PHP2.2 Ruby2.3 Python3 1から100まで出力してみる3.1 PHP3.2 Ruby3.3 Python4 リスト型(配列)の出力4 …

RubyのHanamiチュートリアルをやってみた

1 はじめに2 紹介2.1 Hanamiとは?2.2 Hanamiを選ぶ理由2.2.1 軽量2.2.2 アーキテクチャとして2.2.3 スレッドセーフ3 チュートリアルのための準備4 実践4.1 はじ …

RailsでERBからJavaScriptにhashを渡す方法

1 はじめに2 カスタムデータ属性とは3 実装例3.1 コントローラの実装3.2 ビューの実装3.3 実行結果4 さいごに はじめに 以前、選択したプルダウンメニューに応じて別のプルダウンメニューの内 …

Vue.js入門その4〜TODOアプリにサーバーサイドを追加してみる〜

1 はじめに2 準備2.1 今回作成したいもの2.2 環境構築3 サーバーサイド3.1 DB3.2 メモ:rails generateで余分なファイルを生成しない3.3 作成したファイル4 ビューの作 …

deviseを使ってユーザ登録フォームを作る

1 はじめに1.1 前提条件2 deviseについて2.1 deviseとは2.2 deviseでできること3 登録処理の実装3.1 Gemのインストール3.2 deviseのインストール3.3 デフ …

page_side_300rect




bitFlyer

bitFlyer ビットコインを始めるなら安心・安全な取引所で

アプリ情報

私たちは、目標を達成したい方を応援する、TODOアプリもリリースしております。
下記のアイコンから無料でダウンロードできます。

リンク



follow us in feedly

2017年6月
« 5月   7月 »
 123
45678910
11121314151617
18192021222324
252627282930