在JavaScript中不使用FileSystemObject获取文件大小

Kam*_*esh 1 javascript

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

<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>
Run Code Online (Sandbox Code Playgroud)

除非在Internet Explorer属性中进行一些设置,否则它的工作正常.

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

保存设置并执行程序.

这是有效的,但我想在不使用的情况下获取文件大小 var Fo =new ActiveXObject("Scripting.FileSystemObject");

Sev*_*yev 7

网页上的JavaScript不应该访问本地文件系统.允许访问将是一个巨大的安全漏洞.而且您不能指望您的用户像这样打开他们的系统.

作为一种繁琐的解决方法,使用文件控件("<input type ="file">")创建一个表单,让用户选择文件,将其上传到服务器,让服务器返回文件大小.

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

编辑:为了避免网络往返,您可以发送一个Java小程序(不是JavaScript!)实现简单的HTTP服务器,仅用于文件大小计算,然后将文件发布到localhost和applet的服务器侦听的任意端口上.然而,另外一堆蠕虫会打开 - Java VM,"你信任这个小程序吗?" Windows,阻止侦听端口的安全软件等