Active Storage ダイレクトアップロード

@rails/activestorage を使えばRailsで手軽にS3などへのダイレクトアップロードが実現可能。

Active Storage の概要 - Railsガイド

import * as ActiveStorage from "@rails/activestorage"
ActiveStorage.start()

アセットパイプラインを使う場合、下記の通り。

//= require activestorage

file_fieldにdirect_upload: trueを追加します。

<%= form.file_field :attachments, multiple: true, direct_upload: true %>

サードパーティのストレージサービスにCORSを設定して、ダイレクトアップロードのリクエストを許可します。

以上で完了です。アップロードはフォーム送信時に開始されます。