Получить размер файла без использования FileSystemObject в JavaScript - PullRequest
1 голос
/ 06 января 2010

Я работаю над проектом в 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>

Он работает отлично, если не выполнить некоторые настройки в свойствах Internet Explorer.

В Свойствах Интернета -> Выбрать вкладку «Безопасность» -> Локальный Интернет -> Нажмите кнопку «Пользовательский уровень» -> Инициализировать и сценарии элементы управления ActiveX, не помеченные как безопасные для сценариев, -> Включить его

Сохранить настройки и запустить программу.

Это работает, но я хочу получить размер файла без используя var Fo =new ActiveXObject("Scripting.FileSystemObject");

Ответы [ 2 ]

7 голосов
/ 06 января 2010

JavaScript на веб-странице не должен обращаться к локальной файловой системе. Разрешение доступа было бы огромной дырой в безопасности. И вы не можете ожидать, что ваши пользователи так откроют свою систему.

В качестве громоздкого обходного пути создайте форму с элементом управления файлом (""), попросите пользователя выбрать файл, загрузить его на сервер, разрешить серверу вернуть размер файла.

В HTML5 вы сможете получить доступ к файлу, выбранному в элементе управления файлом. Все еще нет произвольного доступа к файловой системе, но, по крайней мере, вы можете воспроизводить файлы, выбранные вами пользователем.

РЕДАКТИРОВАТЬ: чтобы избежать сетевого обхода, вы можете отправить Java-апплет (не JavaScript!), Который реализует упрощенный HTTP-сервер с единственной целью вычисления размера файла, а затем отправить файл на localhost и произвольный порт, Сервер апплета прослушивает. Однако откроется еще одна банка червей - Java VM: «Вы доверяете этому апплету или нет?» Windows, программное обеспечение безопасности, блокирующее прослушивание портов и т. д.

0 голосов
/ 06 января 2010

По соображениям безопасности вы не можете взаимодействовать с локальной файловой системой в JavaScript.

Если вы не понимаете почему, представьте, что произойдет, если какая-либо веб-страница сможет прочитать вашу папку «Мои документы».

На ваш вопрос нет ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...