Я хочу иметь небольшой лимит загрузки (например, 100 КБ для тестирования, возможно, 6 МБ в конечном итоге). Размер загрузки можно проверить:
перед загрузкой
потерпеть неудачу, когда слишком много загружено
после загрузки
Если пользователь пытается получить файл размером 1 Гб, в идеале должно произойти (1), чтобы файл вообще не загружался. Если нет, (2) должно произойти, чтобы пользователь не знал, что файл слишком велик. Я хотел бы избежать другой возможности (3).
В HTML5, но не в IE9, размер файла можно проверить перед загрузкой, используя:
this.files[0].size
Получить размер файла перед загрузкой
В IE9 может работать следующее, если настройки безопасности настроены:
var objFSO = new ActiveXObject("Scripting.FileSystemObject"); var filePath = $("#" + fileid)[0].value;
var objFile = objFSO.getFile(filePath);
var fileSize = objFile.size; //size in kb
В идеале я хотел бы использовать метод, который работает с IE9. Я слышал об использовании флэш-файлов. Я хотел бы отдельный метод — не использовать большой плагин.
Вот мой код В данный момент он загружает весь файл, прежде чем проверяет, не слишком ли велик размер файла.
<?php
if (isset($_FILES['myfile'])) {
if ($_FILES['myfile']['error'] == UPLOAD_ERR_FORM_SIZE) {
// $_FILES['myfile']['size'] is 0
echo 'Error: file is too big!<br>';
}
else if ($_FILES['myfile']['size'] > 100000) {
echo 'File size is too big!<br>';
}
else {
echo 'File uploaded ok.<br>';
}
}
var_dump($_FILES);
?>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
<input type="file" name="myfile" />
<input type="submit" value="Submit" />
</form>
Небольшой лимит загрузки — только для одной формы, поэтому я не хочу изменять файл глобальных настроек PHP.
Я не уверен, что использование MAX_FILE_SIZE — хорошая идея — человек все еще должен загрузить весь файл, и данные о размере файла теряются (я мог бы сказать людям, насколько велика была их загрузка)
ini_get (‘post_max_size’) возвращает 8M, а ini_get (‘upload_max_filesize’) возвращает 32M. Если файлы размером более 8 МБ пытаются загрузить, файл все равно будет загружен полностью (даже более 40 МБ). После загрузки файлов размером более 8 Мб var_dump ($ _ FILES) возвращает пустой массив.
Если файл больше, чем около 600 Мб, я получаю ошибку 413 … то есть (1).
Поэтому я хочу сделать (1) или (2) в IE9, PHP и jQuery.
Задача ещё не решена.
Других решений пока нет …