Я рекомендую використовувати тільки md5 або що-небудь концептуально еквівалентне. Перейменовуючи файли за допомогою дайджесту вмісту, ви надаєте не лише унікальність (завжди кешуйте зображення настільки довго, наскільки це можливо, і перейменовуючи на основі вмісту, ну, при правильному, ви можете кешувати зображення практично назавжди).
Крім того, це не велика справа, але, тим не менш, це не чистий гіпотетичний випадок, коли різні користувачі завантажують абсолютно однакові зображення. Щойно з коробки у вас буде невелика оптимізація зберігання даних.
Щодо всього іншого, що пропонується: як на мене, я є сильним противником зберігання будь -якої допоміжної інформації у назві файлу. Коли я був набагато молодший (і трохи стрункіший :), я був розробником Perl і мав сумнівну звичку зберігати стільки допоміжної інформації у назві файлів, скільки дозволяв мені здоровий глузд, оскільки особливості шаблону рядка Perl є приголомшливими. І я прийшов до висновку, що, говорячи про веб-розробку, завжди кращий вибір зберігати дані, пов'язані з файлом, окремо від імені файлу.
Майте на увазі, що нині, коли переважають мобільні інтерфейси, власне ім’я файлу є менш важливою річчю, що це було 5, 10 років тому. Але навіть якщо це буде вирішальним у контексті вашої програми, ви завжди можете задіяти якусь стару шкільну магію із залученням Content-Disposition: attachment; filename="pretty_file_name.jpg"
HTTP-заголовка, побудувавши будь-яке відповідне ім’я файлу. Також сучасні браузери прокладають шлях до нового атрибуту HTML5, завантажують . Я не вірю, що насправді бачити ім'я зображення, "читабельне по-людськи" - це те, про що слід думати в більшості випадків.
UPD: Можлива модифікація, щоб не було занадто багато файлів в одному каталозі - просто візьміть перші 3 букви та створіть реж.