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を使って簡単に実装できると思います。

blog-page_footer_336




blog-page_footer_336




-BackEnd

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Kotlinでのnullの基本的な扱いかた

1 はじめに2 基本的にnullを許容しない3 nullを許容するNullable4 Nullableをnon-nullに変える4.1 nullチェックとスマートキャスト4.2 エルビス演算子4.3 ...

laravel logo

Laravelの便利なメールアドレスのバリデーション設定

1 はじめに2 不具合内容2.1 バリデーションルール設定2.2 不正なメールアドレス例3 対応3.1 email:rfc3.2 email:strict3.3 email:dns3.4 email: ...

laravel logo

Laravel SailでDocker環境構築

1 はじめに2 Laravel Sailの基本2.1 Dockerの構成2.2 コンテナの起動・停止2.3 sailで使用できるコマンド3 Laravel Sailの設定3.1 ポートフォワードの設定 ...

Go言語

Go 1.23 で追加された iter パッケージを使ってみる

1 はじめに1.1 iteratorとは2 push方式のイテレータ2.1 kとvを受け取るイテレータ関数2.2 イテレータ関数をチェインさせる2.3 イテレータ関数の型を利用する2.4 イテレーショ ...

Go言語

FSMを使った状態管理をGoで実装する

1 はじめに2 FSMとは3 基本的な実装3.1 実装する状態管理の概要3.2 状態管理を実装する4 structを定義した応用的な実装5 FSMの可視化6 さいごに7 おすすめ書籍 はじめに 一般的 ...

フォロー

blog-page_side_responsive

2017年6月
 123
45678910
11121314151617
18192021222324
252627282930  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。