2010-11-06 4 views
74

Я пытаюсь покататься на волне HTML5, но мне грозит небольшая проблема. Перед HTML5 мы проверяли размер файла со вспышкой, но теперь тенденция заключается в том, чтобы избежать использования flash в веб-приложениях. Есть ли способ проверить размер файла на стороне клиента с помощью HTML5?Клиент Проверка размера файла с помощью HTML5?

ответ

114

Это работает. Поместите его внутри прослушивателя событий, когда изменяется вход.

if (typeof FileReader !== "undefined") { 
    var size = document.getElementById('myfile').files[0].size; 
    // check file size 
} 
+0

Он работает со мной в IE 10, Mozilla FFx и Chrome. Благодаря! – Rahnzo

+0

Не работает для меня в Chrome? https://jsfiddle.net/ffyvbm27/ –

+0

отлично работает, вы просто не используете его правильно; войдите в событие onchange ввода, и все будет в порядке. – dandavis

2

"не простой, кросс-браузер, раствор для достижения этой цели": Detecting file upload size on the client side?

+9

Добавить проверки размера сервера, а также, но вы можете также сохранить те современные браузеры боль и проверить его на стороне клиента, а также. –

7

HTML5 fie api поддерживает проверку размера файла.

читать эту статью, чтобы получить больше информации о файле апи

http://www.html5rocks.com/en/tutorials/file/dndfiles/

<input type="file" id="fileInput" /> 


var size = document.getElementById("fileInput").files[0].size; 

так же подать API дает имя и тип.

0

Uploadify может загружать файлы с помощью HTML5. Также есть флеш-версия.

Вы можете установить ограничения на размер файла с параметром 'fileSizeLimit'.

25

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

document.getElementById('fileInput').onchange = function(){ 
    var filesize = document.getElementById('fileInput').files[0].size; 
    console.log(filesize);  
} 

Если вы используете библиотеку JQuery, то следующий код может пригодиться

$('#fileInput').on('change',function(){ 
    if($(this).get(0).files.length > 0){ // only if a file is selected 
    var fileSize = $(this).get(0).files[0].size; 
    console.log(fileSize); 
    } 
}); 

Учитывая, что преобразование FileSize для отображения, в котором когда-либо метрика до вас.

+0

Ваш пример jQuery не работает. Вы, похоже, не можете использовать jQuery с '.files': https://jsfiddle.net/edxvo4wa/ (я сам это обнаружил, когда придумывал решение - он работает, если вы измените его на' document.getElementById'). –

+1

@ Чак сожалеет об ошибке там, я обновил свой ответ с рабочего – Ammadu

3

Лично я выбрал бы этот формат:

$('#inputFile').bind('change', function(e) { 
     var data = e.originalEvent.target.files[0]; 
     // and then ... 
     console.log(data.size + "is my file's size"); 
     // or something more useful ... 
     if(data.size < 500000) { 
     // what your < 500kb file will do 
     } 
    } 
Смежные вопросы