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で指定の行動をとった際に、クリックイベントを発火させる方法
あるシステムでAという要素をクリックした際に何らかの処理を行うという部分があり、 ...
-
-
jQueryのanimate()でページスクロール後に他の処理を実行させる方法
jQueryのanimate()でページスクロール後に特定の要素を非表示にしたい ...
-
-
NicEdit(WYSIWYGエディタ)を再描写時にサイズを調整する方法
NicEdit(WYSIWYGエディタ)を設置しているサイトがあった。ページ読み ...
-
-
jQueryでユーザーが編集可能な文字列をページ上に表示する際にエスケープする方法
GETパラメータを取得し、その内容をページ上に表示したいケースがあった。また、A ...
-
-
jQueryの「DateTimePicker」プラグインで日付や時間選択時に指定したイベントを実行させる方法
jQueryの「DateTimePicker」プラグインで日付や時間選択時、あら ...