勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

formでファイルを選択した際にファイル名やサイズ、形式を調べる方法

  jQuery JavaScript HTML

フォームで画像などをアップロードする際に「ファイルサイズが大きすぎないか?」「拡張子は合っているか?」等をチェックするケースが多々ある。チェック処理はサーバサイド(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 JavaScript HTML

  関連記事

スマホ対応のjQueryのカラーピッカープラグイン「excolor」の利用方法
スマホ対応のjQueryのカラーピッカープラグイン「excolor」の利用方法

以前の記事でカラーピッカープラグインのことを書いたけどスマホでは使えない。なので ...

日付入力のテキストフォームにカレンダープラグインを導入
日付入力のテキストフォームにカレンダープラグインを導入

やりたかった事と制限は下記の通り。 ・日付入力のテキストフォームにカレンダープラ ...

jQueryからAjax経由でPHPにリクエストしCookieを操作する方法
jQueryからAjax経由でPHPにリクエストしCookieを操作する方法

先日PHPでCookie保存時にHttpOnly / Secure属性を設定する ...

jQueryで対象の要素をまとめて親要素で囲む方法
jQueryで対象の要素をまとめて親要素で囲む方法

あるシステムで出力されているHTMLタグを指定した親要素で囲みたいというケースが ...

jQuery UIでカレンダーピッカー(Datepicker)の利用方法
jQuery UIでカレンダーピッカー(Datepicker)の利用方法

フォーム等で日付を入力する際にカレンダーピッカー機能を実装することがある。その際 ...