【Rails5】file_fieldの拡張子を指定・制限する方法
Rails5 の form_for メソッドを使ってファイルのアップロードフォームを作成する場合、拡張子の指定や制限を行いたい場合があると思います。
今回はそのような拡張子の指定・制限を行う際に必要な処理をメモしておきます。
file_field に accept 属性を追加する
htmlの属性に accept というものがあります。
これを用いることで、アップロードするファイルを選ぶ際の制限をすることができます。
(この方法では弱いのでのちに説明する方法と併用してください)
例えば、拡張子の .mp3 のみを受け付けたい場合は以下のように書きます。
<%= f.file_field :file ,accept:'audio/mp3' %>
accept 属性について参考にしたサイト:https://reference.hyper-text.org/html5/attribute/accept/
注意点として、オーディオファイルの .m4a を指定したい場合は、x-m4a とかく必要があります。
2. controller側で処理を書く!
上の方法だと、フォームからファイルを開いた時に制限はできるのですが、ファイルをドラッグされたり、スマホからだったりした時に対応できません。
なので、controller側で下のようなコードにより簡単な拡張子チェックを行います。
accepted_format = [".mp3"]
if !accepted_format.include? File.extname("ここにファイルネーム")
#指定した拡張子じゃない時の処理をここに書く
return
end
参考にしたサイト:https://codeday.me/jp/qa/20181216/51223.html