在';改变功能';在使用Extjs上传之前

在';改变功能';在使用Extjs上传之前,extjs,file-upload,extjs4.1,Extjs,File Upload,Extjs4.1,我想在更改函数运行时获取文件大小。我试了很多,但都没用。 我该怎么做谢谢 { xtype: 'filefield', name: 'upfile[]', buttonConfig: { text: 'add' }, listeners: { 'change': function(f, value){ alert(f.si

我想在更改函数运行时获取文件大小。我试了很多,但都没用。 我该怎么做谢谢

   {
        xtype: 'filefield',
        name: 'upfile[]',
        buttonConfig: {
            text: 'add'
        },
        listeners: {
              'change': function(f, value){
                    alert(f.size); // not filesize
              }
        }
    }

可以使用
ActiveX对象

function getSize()
{
    var myFSO = new ActiveXObject("Scripting.FileSystemObject");
    var filepath = document.upload.file.value;
    var thefile = myFSO.getFile(filepath);
    var size = thefile.size;
    alert(size + " bytes");
}
请参考下面的链接

  • 唯一通用的解决方案是将文件上载到服务器并恢复文件大小

  • 对于现代浏览器(IE10和所有其他浏览器),您可以使用HTML5文件阅读器API

  • 对于IE9或更少,您可以使用Hariharan的解决方案


  • 如果您想支持大多数浏览器版本,这是不可能的,因为JavaScript无法访问这些信息。最好的方法是自动启动上载,并在获得标头后立即中止。现在您有了文件大小。只需在requestHi@trungkien的回答中发回即可。您可以参考我尝试使用javascript(或)获取大小的链接,但在某些浏览器或旧版本浏览器上不起作用(例如:ie 9不起作用…)。也许Jquery在中做得更好,但Jquery我只是检查了一个小浏览器,不知道如何将它嵌入extjs:(@sra你能给我一个在上传之前使用服务器(php,…)检查的例子。我使用$.ajax({type:“HEAD”,url:f.getValue(),success:function(msg){alert(xhr.getResponseHeader('Content-Length')+'bytes');}});但不工作在某些浏览器中不工作。我只是在Chrome 27.0.1453.116 m版中测试-不工作,Firefox 21.0-不工作:(@trungkien嗯,那是因为ActiveX对象是Microsoft的东西,因此只存在于InternetExplorer中;)
    listeners:{
        change:function(inputFile, value){
                console.log(inputFile.fileInputEl.dom.files[0].size)
         }
    }