Какие ограничения по размеру файла проверить?
Что проверяют
Понимаете ли вы, что лимит на размер файла живёт сразу в нескольких слоях системы и эти лимиты часто не совпадают. Интервьюер ждёт граничные значения и знание того, где именно может сработать отказ. Следом обычно просят составить проверки для конкретной формы загрузки.
Как отвечать
Пройдите по пути файла от клиента до хранилища:
- клиент: проверка
file.sizeв JavaScript до отправки. Она нужна для удобства и легко обходится, поэтому сервер обязан проверять сам; - прокси: у nginx
client_max_body_sizeпо умолчанию 1 МБ, превышение даёт 413. Ответ приходит HTML-страницей nginx, и фронтенд часто показывает на нём невнятную ошибку; - фреймворк: у Spring Boot
spring.servlet.multipart.max-file-sizeпо умолчанию 1 МБ иmax-request-size10 МБ, у PHPupload_max_filesize2 МБ иpost_max_size8 МБ, у Kestrel в ASP.NET Core около 28,6 МБ на тело запроса; - хранилище: квота пользователя, лимиты объектного хранилища, а FAT32 на флешке не примет файл от 4 ГБ.
Граничные значения: ровно лимит, лимит плюс один байт, лимит минус один байт, пустой файл. Сверьте единицы: 10 МБ у фронтенда может означать 10 000 000 байт, а у бэкенда 10 485 760. Лимит на запрос учитывает границы multipart и другие поля формы, так что файл ровно в лимит может не пройти.
Кроме самого отказа проверьте:
- сообщение: пользователь видит понятный текст с допустимым размером;
- таймауты: большой файл на медленной сети упирается не в размер, а в таймауты прокси;
- несколько файлов: лимит на каждый и на всю пачку;
- архивы и картинки: маленький zip может распаковаться в гигабайты, а лёгкое изображение иметь огромное разрешение.
Файлы нужного размера создаются командами truncate -s или dd.
Где спотыкаются
Проверяют только «больше лимита» и забывают про ровно лимит и пустой файл.
Смотрят лишь на интерфейс. Если отсечка есть только на фронтенде, запрос через curl или Postman дойдёт до сервера без ограничений.
Приводят устаревшие цифры вроде «браузеры не пропускают больше 2 ГБ». В актуальных браузерах такого общего лимита нет, на практике отсекает сервер или прокси.