ruby on railsで AWS S3にファイルをアップロートといえば、carrywaveとかfogとか使ってファイルをアップロードしますね。

僕も普段はその方法を使っているのですが、それらってそもそもmodelにuploaderを生成したりとかしているんですね。

今回は、jsからカジュアルに画像をアップロードする仕組みを作りたかったので、サーバーサイドからファイルをアップロードしました。

その時の対応をメモしておきます。

Gemfileに以下を記述

bundle installすると以下がインストールされます

 

クライアント

HTML

Javascript

サーバーサイド

Ruby on Railsですが、Controllerでリクエストを受け付けてから自作のライブラリーでawsにアップロードしています。処理が終わったらjsonで結果を返しています。この記事ではバリデーションやエラーハンドリングなどは無視しています。libで使用している’AWS_CONFIG’は、こちらで用意したconstantsです。設定情報は皆さんよしなにして下さい。

※ githubなどで公開されないようにして下さい。

 

Controller

ajaxで送られたデータは”ActionDispatch::Http::UploadedFile”オブジェクトとして扱われます。temfileでバイナリーを取得できます。

 

lib

 

これでアップロードができます。あくまで記事に載せたのは簡略版なので、バリデーションやエラーハンドリングは自分で実装してね。

詳しくは公式の情報を閲覧下さい。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UploadObjSingleOpRuby.html

 


※ AWSの設定は.awsという名前で以下のように書くと読み込んでくれるようですが、私はうまく行きませんでした…

時間があるときに試してみたいと思います。