回答:
実際にはファイルシステムにアクセスできません(ローカルファイルの読み取りや書き込みなど)。ただし、HTML5 File Api仕様により、アクセスできるファイルプロパティがいくつかあり、ファイルサイズはそのうちの1つです。
以下のHTMLの場合
<input type="file" id="myFile" />
以下を試してください:
//binds to onchange event of your input field
$('#myFile').bind('change', function() {
//this.files[0].size gets the size of your file.
alert(this.files[0].size);
});
これはHTML5仕様の一部であるため、最新のブラウザー(IEにはv10が必要)でのみ機能し、知っておくべきその他のファイル情報に関する詳細とリンクをここに追加しました:http : //felipe.sabino.me/javascript / 2012/01/30 / javascipt-checking-the-file-size /
古いブラウザのサポート
古いブラウザはnull
前のthis.files
呼び出しの値を返すため、アクセスするthis.files[0]
と例外が発生し、それを使用する前にファイルAPIのサポートを確認する必要があることに注意してください
jQuery
JavaScriptファイルが追加されなかった(または適切にロードされなかった)ためです。head
ページのに追加しましたか?
jQueryを使用したいvalidate
場合は、次のメソッドを作成してください。
$.validator.addMethod('filesize', function(value, element, param) {
// param = size (en bytes)
// element = element to validate (<input>)
// value = value of the element (file name)
return this.optional(element) || (element.files[0].size <= param)
});
あなたはそれを使うでしょう:
$('#formid').validate({
rules: { inputimage: { required: true, accept: "png|jpe?g|gif", filesize: 1048576 }},
messages: { inputimage: "File must be JPG, GIF or PNG, less than 1MB" }
});
$('#formid').validate({ rules: { inputimage: { required: true, extension: "png|jpe?g|gif", filesize: 1048576 }}, messages: { inputimage: "File must be JPG, GIF or PNG, less than 1MB" } });
このコード:
$("#yourFileInput")[0].files[0].size;
フォーム入力のファイルサイズを返します。
FF 3.6以降では、このコードは次のようになります。
$("#yourFileInput")[0].files[0].fileSize;
ASP.NET FileUpload
コントロールに使用する私のソリューションも投稿しています。多分誰かがそれを便利だと思うでしょう。
$(function () {
$('<%= fileUploadCV.ClientID %>').change(function () {
//because this is single file upload I use only first index
var f = this.files[0]
//here I CHECK if the FILE SIZE is bigger than 8 MB (numbers below are in bytes)
if (f.size > 8388608 || f.fileSize > 8388608)
{
//show an alert to the user
alert("Allowed file size exceeded. (Max. 8 MB)")
//reset file upload control
this.value = null;
}
})
});
f = this.files[0]
ます。そうしないと、古いブラウザでは失敗します。例if (f && (f.size > 8388608 || f.fileSize > 8388608))
以下を使用してファイルのサイズを確認し、それより大きい場合はクリアします。
$("input[type='file']").on("change", function () {
if(this.files[0].size > 2000000) {
alert("Please upload file less than 2MB. Thanks!!");
$(this).val('');
}
});
このタイプのチェックは、FlashまたはSilverlightでは実行できますが、JavaScriptでは実行できません。JavaScriptサンドボックスでは、ファイルシステムへのアクセスは許可されていません。サイズの確認は、アップロード後にサーバー側で行う必要があります。
Silverlight / Flashルートに移動する場合は、通常のコントロールを使用する通常のファイルアップロードハンドラーがデフォルトでインストールされていないかどうかを確認できます。このように、Silverlight / Flashがインストールされている場合、エクスペリエンスはもう少し豊かになります。
<form id="uploadForm" class="disp-inline" role="form" action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
</form>
<button onclick="checkSize();"></button>
<script>
function checkSize(){
var size = $('#uploadForm')["0"].firstChild.files["0"].size;
console.log(size);
}
</script>
標準のajax / html5メソッドでフォームを送信する予定がない場合は、これが最も簡単であることがわかりましたが、もちろん何でも機能します。
ノート:
var size = $('#uploadForm')["0"]["0"].files["0"].size;
これは以前は機能しましたが、Chromeでは機能しなくなりました。上記のコードをテストしたところ、ffとchrome(最新)の両方で機能しました。2番目の["0"]がfirstChildになりました。