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

Jim*_*mmy 128 javascript jquery file-upload

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

Fel*_*ino 263

您实际上无权访问文件系统(例如读取和写入本地文件),但是,由于HTML5文件Api规范,您可以访问一些文件属性,文件大小就是其中之一.

对于下面的HTML

<input type="file" id="myFile" />
Run Code Online (Sandbox Code Playgroud)

尝试以下方法:

//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);

});
Run Code Online (Sandbox Code Playgroud)

由于它是HTML5规范的一部分,它只适用于现代浏览器(IE需要v10),我在这里添加更多关于您应该知道的其他文件信息的详细信息和链接:http://felipe.sabino.me/javascript/2012/01/30/javascipt的检查的所述文件尺寸/


旧浏览器支持

请注意,旧浏览器将返回null上一次this.files调用的值,因此访问this.files[0]将引发异常,您应该在使用之前检查File API支持

  • @Jeroen我同意不为IE工作使它不是很多人的理想解决方案,但是没有给出一个低投票,并说答案是无用的有点太多了?我在各种各样的企业Web解决方案中使用了这个解决方案,这个解决方案只需要在chrome和/或firefox中工作,而且有些人在寻找这个解决方案可能在同一个地方,所以这个解决方案就足够了. (35认同)
  • 每个人都说不能这样做 - 但现在就是这样.这有效.我测试了它. (6认同)
  • 我刚刚在Google上遇到了这个答案,我将用它来阻止用户发布超过给定大小的文件; 因为我也在服务器端检查文件大小,我很高兴有一个在IE8中不起作用的客户端解决方案. (3认同)
  • @GaolaiPeng这个错误可能是因为没有添加`jQuery` javascript文件(或者没有正确加载).你把它添加到页面的"头部"吗? (2认同)

Nao*_*den 39

如果你想使用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) 
});
Run Code Online (Sandbox Code Playgroud)

你会用它:

$('#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" }
});
Run Code Online (Sandbox Code Playgroud)

  • 您错误地使用了`accept`规则,您应该使用`extension`规则.〜[`accept`规则](http://jqueryvalidation.org/accept-method/)仅适用于MIME类型.[`extension` rule](http://jqueryvalidation.org/extension-method/)用于文件扩展名.您还需要为这些规则包含[additional-methods.js`文件](http://cdn.jsdelivr.net/jquery.validation/1.13.1/additional-methods.js). (6认同)

小智 22

这段代码:

$("#yourFileInput")[0].files[0].size;
Run Code Online (Sandbox Code Playgroud)

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

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

$("#yourFileInput")[0].files[0].fileSize;
Run Code Online (Sandbox Code Playgroud)

  • 您的第一个代码适用于chrome,但第二个代码不适用于FireFox最新版本. (2认同)

Ume*_*til 15

使用下面检查文件的大小并清除它是否更大,

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


小智 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;
        }
    })
});
Run Code Online (Sandbox Code Playgroud)