客户端使用HTML5检查文件大小吗?


84

我正在尝试应对HTML5浪潮,但面临一个小问题。在HTML5之前,我们曾使用Flash检查文件大小,但现在的趋势是避免在Web应用程序中使用Flash。有什么方法可以使用HTML5在客户端检查文件大小?

Answers:


126

这可行。将其放置在事件侦听器中,以了解何时输入发生更改。

if (typeof FileReader !== "undefined") {
    var size = document.getElementById('myfile').files[0].size;
    // check file size
}

它在IE 10,Mozilla FFx和Chrome中对我有效。谢谢!
Rahnzo 2014年

工作正常,只是您没有正确使用它;登录输入的onchange事件,一切都会好起来的。
dandavis

@dandavis我在答案中使用代码。如果代码可以正常工作,为什么我需要更改它?
Chuck Le Butt 2015年

1
@Chuck您的示例不起作用,因为您尝试在选择任何文件之前读取页面加载时的文件列表。
2015年

1
@Chuck:好的,它确实可以正常工作,您确实可以粘贴它,但是仅靠它是不够的。如果您在填充文件后在控制台中运行它,则可以正常运行。对于应用程序来说,控制台是不好的,因此您应该将代码放入输入填充后运行的事件中,以便它可以按预期工作。很抱歉对于这个误会。
dandavis

33

接受的答案实际上是正确的,但是您需要将其绑定到事件侦听器,以便在更改文件输入时将其更新。

document.getElementById('fileInput').onchange = function(){
    var filesize = document.getElementById('fileInput').files[0].size;
    console.log(filesize);    
}

如果您使用的是jQuery库,则以下代码可能会派上用场

$('#fileInput').on('change',function(){
  if($(this).get(0).files.length > 0){ // only if a file is selected
    var fileSize = $(this).get(0).files[0].size;
    console.log(fileSize);
  }
});

鉴于fileSize的转换取决于您选择哪种度量标准。


您的jQuery示例不起作用。你似乎不能够使用jQuery有.filesjsfiddle.net/edxvo4wa(我这个发现我自己,当我想出一个解决方案-如果你将其更改为它的工作原理document.getElementById)。
Chuck Le Butt 2015年

1
@Chuck抱歉,那里的错误,我已经更新了正在使用的答案
Ammadu


3

就个人而言,我会选择以下格式:

    $('#inputFile').bind('change', function(e) {
      var data = e.originalEvent.target.files[0];
      // and then ...
      console.log(data.size + "is my file's size");
      // or something more useful ...
      if(data.size < 500000) {
        // what your < 500kb file will do
      }
    }

1
我相信500kb实际上将是500 *1024。这没什么大不了的,但是拥有500,000b文件的最终用户会将其视为488kb,并被拒绝。巨大的挫败感由此而来
Apolo

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.