Видалення обмежень щодо розміру файлу для завантаження
Для налаштування установки LAMP (Linux, Apache, MySQL, PHP), яка дозволяє користувачеві завантажувати великі файли на свій сервер, необхідно зробити наступне:
Змініть наступні змінні в php.ini
memory_limit
= 1000М - встановлення ліміту пам’яті до того, що доступно в системі
post_max_size
= 4G - Переконайтесь, що це значення більше або дорівнює upload_max_filesize
значенню
upload_max_filesize
= 4G - встановіть це так, щоб ви хотіли максимум
upload_tmp_dir:
/mnt/raid10/Files/Temp
- За замовчуванням це вимкнено, що робить тимчасове місце розташування на тому ж диску, що і встановлена ОС. У моєму випадку запускати все з Raspberry Pi, що робить його SD-карткою. Щоб було менше обмежень, я встановив це замість свого мережевого диска.
Виконавши вищезазначене, обмеженням розміру завантаження файлів є фізична пам'ять, доступна для пристрою, для чого встановлено memory_limit
, та обмеження файлової системи (4 ГБ для файлової структури FAT). У випадку з моїм Raspberry Pi 3 це було 1 Гб.
Обхід ліміту пам’яті для завантаження файлу, що перевищує об’єм пам’яті
Єдиний спосіб пройти межу пам'яті - це скинути завантаження. Після ввімкнення чунчінгу під час завантаження відбувається таке:
- Завантаження розпочато на веб-сторінці.
- Дані з вихідного файлу передаються в пам'ять веб-сервера.
- Дані скидаються з пам'яті веб-сервера на тимчасове розташування файлів.
- Після того, як тимчасовий файл досягне встановленого розміру, тоді ці дані скидаються у файл остаточного місця призначення та тимчасовий файл видаляється.
- Повторіть крок 2, поки файл не буде завершено.
Як користуватися чунчінгом
Якщо ви використовуєте обробник завантаження, подібний до цього ( https://github.com/blueimp/jQuery-File-Upload/blob/master/server/php/UploadHandler.php ), то існує багато вбудованих варіантів.
У моєму випадку, де оголошено #fileupload, я додав рядок для maxChunkSize
:
$('#fileupload').fileupload({
maxChunkSize: 10 * 1024 * 1024, // 10 MB <-----This is the line I added
add: function (e, data) {
blah blah blah
}
});
}
});
Яке б значення тут не було, буде використаний розмір шматка. Вибраний вами розмір вимагає трохи експериментів, оскільки невеликий розмір повільно скоротить швидкість завантаження, а один занадто великий призведе до того, що користувач сайту не побачить прогрес на панелі прогресу протягом досить тривалого часу. Для мене 10MB було щасливим середовищем.
* Зауважте, що панель прогресу для завантаження переміщуватиметься лише тоді, коли починається кожен шматок, тож він стає більш спритним, ніж хороша смуга безперервного прогресу, але я з цим насправді гаразд.