formでファイルを選択した際にファイル名やサイズ、形式を調べる方法
フォームで画像などをアップロードする際に「ファイルサイズが大きすぎないか?」「拡張子は合っているか?」等をチェックするケースが多々ある。チェック処理はサーバサイド(PHP等)じゃないとできないと思っていたが、HTML5のFile APIを利用することでフロントエンドでもチェックできることを最近知ったのでメモ。
サンプル
https://taitan916.info/sample/fileapi/
ソースコード
<html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>File APIのテスト</title> </head> <body> <input type="file" id="file"> <input type="button" id="button" value="ファイル情報を表示"> <div id="file_data"> </div> <script type="text/javascript" src="//code.jquery.com/jquery-3.5.1.js"></script> <script> $(function(){ $('#button').click(function(){ //jQueryで取得する場合 const file = $('#file').prop('files')[0]; //JavaScriptで取得する場合 //const file = document.getElementById('file').files[0]; const file_data = "\ ファイル名:" + file.name + "<br>\ ファイルサイズ:" + file.size + "byte<br>\ ファイル形式:" + file.type + "<br>\ "; console.log(file); $('#file_data').html(file_data); }); }); </script> </body> </html>
ファイルサイズはbyte単位になるのでKB単位にする場合は1024、MB単位にする場合は1048576で割る。
対応ブラウザ
IE11を含め主要ブラウザは対応している。以下より対応ブラウザが確認できる。
https://developer.mozilla.org/ja/docs/Web/API/File#browser_compatibility
所感
サーバサイド(PHP)でファイルのチェックを行い、例えばファイルサイズが大きすぎるのでアップロード不可という場合に元のフォームページに戻ることになるが、その際にファイルは選択されていない状態になる。テキストボックス等は$_POSTで元のフォームページに送ったり、セッションに保存したものをフォームに反映させることは容易だがファイルに関しては対応が難しい。
フロントエンドでチェックができると上記の問題が解決される。もちろんサーバサイドでもチェックは必要だが、先にフロントエンドでチェックし問題があるようならアラート等で知らせる方がユーザビリティの面で良さそう。
関連記事
-
jQueryでユーザーが編集可能な文字列をページ上に表示する際にエスケープする方法
GETパラメータを取得し、その内容をページ上に表示したいケースがあった。また、A ...
-
jQuery UIでカレンダーピッカー(Datepicker)の利用方法
フォーム等で日付を入力する際にカレンダーピッカー機能を実装することがある。その際 ...
-
モーダルウィンドウ表示時にウィンドウのスクロール位置をリセットする方法
モーダルウィンドウ内で「縦にスクロール→ウィンドウを閉じる→改めてモーダルウィン ...
-
スクロールしてもついてくる追尾型の広告を作る方法
スマホサイトとかでよく見る、スクロールしてもページ下部とかに常時表示されている追 ...
-
jQueryのdatetimepickerでスクロール入力を無効化させる方法
日時ピッカーのjQuery datetimepickerにて、ピッカーを指定して ...