如何用jQuery检查文件输入大小?

时间:2009-10-21 15:05:04

标签: javascript jquery file-upload

我有一个具有文件上传功能的表单,如果用户尝试上传的文件太大,我希望能够有一些不错的客户端错误报告,有没有办法用jQuery检查文件大小,要么纯粹在客户端上,要么以某种方式将文件发回服务器进行检查?

9 个答案:

答案 0 :(得分:261)

您实际上无法访问文件系统(例如读取和写入本地文件),但是,由于HTML5文件Api规范,您可以访问一些文件属性,文件大小是它们。

对于下面的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),我添加了here更多有关您应该知道的其他文件信息的详细信息和链接:{{3} }


旧浏览器支持

请注意旧版浏览器会为之前的null调用返回this.files值,因此访问this.files[0]会引发异常,您应该http://felipe.sabino.me/javascript/2012/01/30/javascipt-checking-the-file-size/才能使用它/ p>

答案 1 :(得分:37)

如果你想使用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" }
});

答案 2 :(得分:20)

此代码:

$("#yourFileInput")[0].files[0].size;

返回表单输入的文件大小。

在FF 3.6及更高版本上,此代码应为:

$("#yourFileInput")[0].files[0].fileSize;

答案 3 :(得分:12)

我也发布了我的解决方案,用于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;
        }
    })
});

答案 4 :(得分:2)

在下面使用以检查文件的大小并清除文件的大小,

    $("input[type='file']").on("change", function () {
     if(this.files[0].size > 2000000) {
       alert("Please upload file less than 2MB. Thanks!!");
       $(this).val('');
     }
    });

答案 5 :(得分:1)

您可以使用Flash或Silverlight进行此类检查,但不能使用Javascript。 javascript沙箱不允许访问文件系统。在上传后,需要在服务器端完成大小检查。

如果您想要使用Silverlight / Flash路由,您可以检查它们是否未安装为默认使用常规控件的常规文件上载处理程序。这样,如果确实安装了Silverlight / Flash,他们的体验将会更加丰富。

答案 6 :(得分:1)

<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(最新)中都有效。第二个[&#34; 0&#34;]现在是firstChild。

答案 7 :(得分:0)

请尝试以下操作:

var sizeInKB = input.files[0].size/1024; //Normally files are in bytes but for KB divide by 1024 and so on
var sizeLimit= 30;

if (sizeInKB >= sizeLimit) {
    alert("Max file size 30KB");
    return false;
}

答案 8 :(得分:0)

<form>
   <input id="file" name="filename" type="file" />
</form>

$(function(){
    $('#file').change(function(){
        var file=this.files[0]
        alert(file.size||file.fileSize)
    })
})