2010-11-16 6 views
8

Когда пользователь выбирает файл для загрузки, есть ли способ получить точный размер этого файла до начала загрузки? Я предполагаю, что это нужно сделать на стороне клиента с помощью jQuery или JavaScript. Любые идеи как?Получение размера загружаемого файла перед загрузкой

ответ

5

Это не может быть сделано в чистом Javascript в современных браузерах.

Вместо этого вы можете использовать Uploadify, в котором используется Flash.

In non-IE browsers, вы также можете use HTML5 to read files on the client.

+0

re: http://www.caniuse.com/. Информативная, но удручающая связь. Интересно, будет ли IE навсегда оставаться в красном. –

0

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

0

Предлагаю вам ознакомиться с API-интерфейсом HTML5. Это, в сочетании с некоторыми JS может быть в состоянии помочь вам. Я могу только сказать, потому что у меня еще не было возможности просмотреть эту часть стандарта HTML5.

http://www.w3.org/TR/FileAPI/#dfn-filereader

То, как загрузки PHP файл работает, это очень трудно, прежде чем проверить информацию о файле или во время загрузки файла (так как файл будет загружен, прежде чем ваш код даже загружается).

Я знаю, что на некоторых других языках (возможно, на Perl или Python) можно выполнять некоторые причудливые действия, которые обрабатывают загрузку файла непосредственно с помощью скрипта (где скрипт открывает сокет и обрабатывает всю передачу), однако PHP делает это для вас и принимает любой файл от имени вашего сценария. Файл отбрасывается, если он не находится в допустимых пределах PHP, но только после того, как файл полностью загружен.

Было также реализовано несколько реализаций загрузки файлов с использованием Flash, но, не являясь кодовым кодеком ActionScript, я тоже не могу помочь слишком много.

1
$("#file_input_selector").bind('change', function(){ 
alert(this.files[0].size); 
}); 

Не уверен в проблемах совместимости, но это, похоже, работает для меня отлично.

Смежные вопросы