【Rails4】Dropboxにファイルをアップロードする
目的
0. Dropboxアカウントを取得し、下記からDropboxのアプリを作成する
Login - Dropbox
※キャプチャが少し古いが下記のサイトが参考になる
Dropbox APIをRuby on Railsから叩く方法
1. gem をインストールする。今回はdropbox-apiというgemを使用。bundle installも忘れずに。
※以前にdropbox-sdkを使用した際も比較的簡単に使用できたが、dropbox-apiでより簡単になったと思う。
# Gemfile gem "dropbox-api"
2. 0で作成したアプリのApp keyとApp secretをRailsに設定する。
※ config/initializers/dropbox.rb を作成して追記。
# config/initializers/dropbox.rb Dropbox::API::Config.app_key = "Your App key" Dropbox::API::Config.app_secret = "Your App secret" Dropbox::API::Config.mode = "sandbox" # if you have a single-directory app # Dropbox::API::Config.mode = "dropbox" # if your app has access to the whole dropbox # 今回はRailsアプリからは0で作成したDropboxアプリにしかアクセスしないので"sandbox"を選択した
3. 設定した情報を基に認証画面を表示・承認して、アクセストークンを発行する
# controllers/sample_contoroller.rb def authorize consumer = Dropbox::API::OAuth.consumer(:authorize) request_token = consumer.get_request_token session[:token] = request_token.token session[:token_secret] = request_token.secret url = request_token.authorize_url(:oauth_callback => url_for(action: :callback)) # 承認後に呼ばれるURLを指定。4で書くアクション。 redirect_to url end
4. アクセストークンを取得する
※ config/initializers/dropbox.rb を作成して追記。
# controllers/sample_contoroller.rb def callback consumer = Dropbox::API::OAuth.consumer(:authorize) hash = { oauth_token: session[:token], oauth_token_secret: session[:token_secret]} request_token = OAuth::RequestToken.from_hash(consumer, hash) oauth_verifier = params[:oauth_verifier] result = request_token.get_access_token(:oauth_verifier => oauth_verifier) # 取得したtokenを利用してClientオブジェクトを生成。 client = Dropbox::API::Client.new :token => result.token, :secret => result.secret end
5. 実際に動かす
①authorizeのリンクを画面に追加して、押下する
②Dropboxの承認画面が表示されるので承認する
③callbackアクションにリダイレクトする
※毎回アップロードするたびにtokenを発行することはないので、callback内でDBに保存する等しておくとよい。