7.1 ストレージ
ファイルの保存先を設定する
ActiveStorageのファイルの保存先は、Railsの環境ごとの設定ファイルで指定することができます。
以下の例では本番環境ではAmazon S3に、開発環境ではlocal
に保存する設定をしています。
config/environments/development.rb
config.active_storage.service = :local
config/environments/production.rb
config.active_storage.service = :amazon
複数のストレージを同期する
Mirror Serviceという機能を使うことにより、複数のストレージサービスを同期させることができます。 以下は本番環境のストレージにミラーサービスを適応させた設定例になります。 S3にアップロードされた内容はAzureにも適応されます。
s3_west:
service: S3
access_key_id: ""
secret_access_key: ""
region: ""
bucket: ""
azure:
service: AzureStorage
path: ""
storage_account_name: ""
storage_access_key: ""
container: ""
production:
service: Mirror
primary: s3_east
mirrors:
- azure
独自の保存先を定義する
ActiveStorage::Service
を継承し拡張することで、好きなプロバイダーをアップローダーのサービスとして利用することができます。
サービスへダイレクトアップロードする
ActiveStorageのJavaScriptのライブラリを利用することによってクライアントからクラウドストレージに直接ファイルをアップロードすることができます。
アセットパイプラインでactivestorage
を読み込みます。
app/assets/javascripts/application.js
//= require activestorage
フォーム部分では以下のようなファイルフィールドを生成します。
<%= form.file_field :attachments, multiple: true, direct_upload: true %>
これらの設定でフロントから直接クラウドにアップロードされるようになります。
以下は利用できるイベントの一覧です。
イベント名 | イベントの対象 | データ | 説明 |
---|---|---|---|
direct-uploads:start | フォーム | 無し | フォームが送信された時 |
direct-upload:initialize | ファイルフィールド | {id, file} | ファイルにディスパッチされる時 |
direct-upload:before-blob-request | ファイルフィールド> | {id, file, xhr} | アップロードメタデータを要求する直前の時 |
direct-upload:before-storage-request | ファイルフィールド | {id, file, xhr} | ファイルを保存するリクエストを出す直前の時 |
direct-upload:progress | ファイルフィールド | {id, file, progress} | ファイルを保存が進行中の時 |
direct-upload:error | ファイルフィールド | {id, file, error} | エラーが発生した時 |
direct-upload:end | ファイルフィールド | {id, file} | アップロードが終了した時 |
direct-uploads:end | フォーム | 無し | すべてのアップロードが終了した。 |