2009-02-13 4 views
6

У меня есть тег ввода файла в моем веб-приложении. Я хотел бы проверить, что файл не слишком большой, прежде чем отправлять его на сервер. Конечно, у меня все еще есть сторона сервера проверки. Есть ли способ сделать это с помощью JavaScript? Он должен работать в IE7 + и FF3 +. Спасибо.Как получить размер файла перед его загрузкой?

EDIT: somefileinputobject.files [0] .filesize работает в FF, но не в IE.

+0

К сожалению, это еще не перекрестная платформа без использования плагинов (например, flash). http://www.w3.org/TR/FileAPI/ - это рабочие спецификации, поддерживаемые Firefox. – Matthew

+0

Duplicate: http://stackoverflow.com/questions/158149/how-do-you-restrict-the-size-of-a-file-being-uploaded-with-javascript-or-java-w –

+0

См. [This новый вопрос и ответ.] (http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation) В современных браузерах это возможно без запроса на сервер, хотя проверка должна выполняться на сервер так или иначе. – Pointy

ответ

2

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

В UI Library от Yahoo есть инструмент, который поможет в этом. YUI Uploader

+0

Это решение будет работать для меня, если я могу проверить заголовки файлов, используя jQuery/Javascript перед представлением Ajax. Возможно ли это, и если да, то как? Благодарю. – TonE

+0

Боюсь, что это не так. Я думаю, что у Flash есть возможности для этого. Если вы можете позволить себе оплатить стоимость запроса на обратный рейс, я бы попросил ваш скрипт хранить информацию из заголовков в POST, а затем ваш JQuery извлекал их в отдельный вызов. Я считаю, что так работает инструмент YUI. –

0

Javascript не может этого сделать. Это будет иметь серьезные проблемы с безопасностью. Возможно, вспышка может.

+1

JS жестяная банка. См. Http://www.w3.org/TR/FileAPI/. На данный момент только FF 3.6 поддерживает его (насколько я знаю). Это небезопасно, в том смысле, что пользователь должен выбрать файл. Однако он менее безопасен в том смысле, что им больше не нужно нажимать кнопку отправки. – Matthew

+0

Во всяком случае, это утверждение является обвинительным заключением Flash. –

+0

Я даже не знаю, как я пришел сюда, но .. сегодня .. его возможно во всех основных браузерах; D – GottZ

0

Короткий ответ: Нет, вы должны обращаться с этим на сервере.

Длинный ответ: Не надежно. В IE вы могли бы сделать что-то вроде:

function checkSize(filespec) { 
var fso, f, s; 
fso = new ActiveXObject("Scripting.FileSystemObject"); 
f = fso.GetFile(filespec); 
s = f.size; 
// Do something with var s 
} 

Но это может быть легко comprimised настроек безопасности браузера или использованием другого браузера или платформы.

0

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

0

У вас действительно не так много вариантов, если вы используете традиционный контроль ввода файлов. Вы не можете проверить его на стороне клиента, и он поразит вашу сконфигурированную maxRequestLength, прежде чем вы получите возможность проверить ее на стороне сервера. Вы можете поймать исключение, которое возникает, когда maxRequestLength превышено.

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