Итак, что нужно учитывать при организации фичи, позволяющей грузить аватары?
- Загруженные файлы не должны исполняться (особенно актуально в случае пыха).
- Отвергаем слишком большие запросы?
- Валидацию чего-нибудь типа mime-type, extension производим?
- Делаем resize, удаляем всю метаинформацию.
- Храним в файловой системе?
- В качестве имени используем что-нибудь своё. Хеш файла?
- В одной
корзине все яйцадиректории все файлы не храним, раскидываем по разным на основе хеша (или чего)? Используем несколько уровней вложенности (filename -> fi/le/na/me.png), сколько? - Как отдаём? Напрямую сервером?
- Отдаём статику (в том числе аватары) отдельным cookieless сервером с отдельным доменом.
- Превьюшки делаем сразу при загрузке? А если в процессе требование к размеру превьюшки меняется (вчера нужны были 50x50, сегодня 100x100, а с новым дизайном завтра нужно будет 80x80)?