【问题标题】:Get filesize on 'change function' before upload using Extjs在使用 Extjs 上传之前获取“更改函数”的文件大小
【发布时间】:2013-06-25 11:09:17
【问题描述】:

我想在更改功能运行时获取文件大小。我尝试了更多,但没有任何效果。 我该怎么做谢谢

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

【问题讨论】:

  • 如果您想支持大多数浏览器版本,这是不可能的,因为 JavaScript 无法访问该信息。最好的解决方法是自动启动上传并在您获得标题后立即中止它。现在你有了文件大小。只需在请求的答案中将其发回
  • 嗨@trungkien,你可以参考链接sencha.com/forum/…
  • 我尝试使用 javascript(在 i.ndigo.com.br/2012/01/javascipt-checking-the-file-sizeclassle.net/faq/check-file-size-using-javascript-uploading 中)来获取大小,但在某些浏览器或旧版本浏览器上不起作用(例如:ie 9 不起作用......)。也许 Jquery 在forum.jquery.com/topic/checking-file-size-before-uploading-it 中做得更好,但 Jquery 我只是检查小浏览器并且不知道将它嵌入到 extjs :(
  • @sra 你能给我一个使用服务器(php,..)在上传前检查的例子吗?我使用 $.ajax({ type: "HEAD", url: f.getValue(), success: function(msg){ alert(xhr.getResponseHeader('Content-Length') + ' bytes'); } });但不工作

标签: extjs file-upload extjs4.1


【解决方案1】:
  1. 唯一通用的解决方案是将文件上传到服务器并取回文件大小

  2. 对于现代浏览器(IE10 和所有其他浏览器),您可以使用 HTML5 FileReader API

    https://developer.mozilla.org/en-US/docs/Web/API/FileReader

  3. 对于 IE 9 或更低版本,您可以使用 Hariharan 的解决方案

【讨论】:

    【解决方案2】:
    listeners:{
        change:function(inputFile, value){
                console.log(inputFile.fileInputEl.dom.files[0].size)
         }
    }
    

    【讨论】:

      【解决方案3】:

      ActiveX Objects 是可能的。

      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");
      }
      

      请参考以下链接

      http://www.sencha.com/forum/showthread.php?158445-How-can-i-get-the-size-of-the-file-before-upload

      【讨论】:

      • 它在某些浏览器中不起作用。我只是在 Chrome 版本 27.0.1453.116 m 中测试 - 不工作,Firefox 21.0 - 不工作:(
      • @trungkien 好吧,那是因为 ActiveX 对象是 Microsoft 的东西,因此只存在于 InternetExplorer 中;)
      猜你喜欢
      • 2018-11-10
      • 2011-05-10
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      相关资源
      最近更新 更多