2010-01-06 70 views
1

我正在处理ASP.NET中的一个项目,其中我想使用JavaScript获取文件大小。其实,我得到了解决方案,这就像下面这样在JavaScript中不使用FileSystemObject获取文件大小

<script language="javascript"> 
    var Fo =new ActiveXObject("Scripting.FileSystemObject"); 
    var fileName=new String(); 

    function Trim(input) 
    { 
     var lre = /^\s*/; 
     var rre = /\s*$/; 
     input = input.replace(lre, ""); 
     input = input.replace(rre, ""); 
     return input; 
    } 

    function getSize(filePath) 
    { 
     try 
     { 
      var thefile = Fo.getFile(filePath); 
      var size = thefile.size; 
      return size; 
     } 
     catch(err){} 
    } 

    function getType(filePath) 
    { 
     try 
     { 
      var thefile = Fo.getFile(filePath); 
      var fileType = thefile.type; 
      return fileType; 
     } 
     catch(err){} 
    } 

    function ShowErrorPnl(tblPnl) 
    { 
     document.getElementById(tblPnl).style.visibility='visible'; 
     document.getElementById(tblPnl).style.backgroundColor='Yellow'; 
     document.getElementById(tblPnl).style.borderColor='Silver'; 
    } 

    function UploadFile_CheckType(fileUploadCtrl,messageCtrl,hFieldCtrl,tblPnl) 
    { 
     try 
     { 
      var file = document.getElementById(fileUploadCtrl); 
      var fileName=file.value; 
      document.getElementById(messageCtrl).innerText=''; 
      document.getElementById(tblPnl).style.visibility='hidden'; 
      document.getElementById(hFieldCtrl).value=''; // File can be uploaded. 
      //Checking for file browsed or not 
      if((getSize(fileName)/1024)>500) 
      { 
       document.getElementById(messageCtrl).innerText=' File size is exceeding 500K'; 

       document.getElementById(hFieldCtrl).value='0'; // File cannot upload. 
       ShowErrorPnl(tblPnl); 
       file.focus(); 
       return false; 
      } 
      if(getType(fileName)!='Microsoft Office Word 97 - 2003 Document' && 
       getType(fileName)!='Adobe Acrobat Document') 
      { 
       document.getElementById(messageCtrl).innerText= 
        (document.getElementById(messageCtrl).innerText=='' ? 
        ' Only Doc and pdf file can be upload!!!' : 
        document.getElementById(messageCtrl).innerText + 
        '\n'+' Only Doc and pdf file can be upload!!!'); 
       ShowErrorPnl(tblPnl); 
       document.getElementById(hFieldCtrl).value='0'; // File cannot upload. 
       file.focus(); 
       return false; 
      } 
     } 
     catch(err){} 
    } 
</script> 

它是完美的工作,除非在Internet Explorer属性中进行一些设置。

在Internet属性 - >选择安全选项卡 - >本地互联网 - >点击自定义级别按钮 - >初始化和脚本的ActiveX控件未标记为可安全执行脚本 - >让它启用

保存设置并执行程序。

这是工作,但我希望得到的文件大小不 使用Web页面上var Fo =new ActiveXObject("Scripting.FileSystemObject");

回答

7

JavaScript是不应该访问本地文件系统。允许访问将是一个巨大的安全漏洞。你不能指望你的用户像这样开放他们的系统。

作为一个繁琐的解决方法,使用文件控制(“< input type =”file“>”),使用户选择文件,将其上传到服务器,让服务器返回文件大小。

在HTML5中,您将能够访问在文件控件中选择的文件。仍然没有任何文件系统访问权限,但至少你可以使用你的用户为你选择的文件。

编辑:为了避免网络往返,您可以发布一个Java applet(不是JavaScript!),它实现了一个简单的HTTP服务器,用于文件大小计算的唯一目的,然后将文件发布到localhost和任意端口小程序的服务器侦听。另一种蠕虫可以打开 - Java VM,“你相信这个applet吗?”窗口,阻止监听端口的安全软件等。

0

出于安全原因,您无法使用JavaScript与本地文件系统进行交互。

如果你不明白为什么,想象一下,如果任何网页可以读取我的文档文件夹,会发生什么。

你的问题没有答案。