Либо для сохранения их в базе данных, либо в папке с уникальным именем
Базы данных оптимизированы для хранения небольших фрагментов данных, а не больших двоичных объектов. Вы получите лучшую производительность, если позволите обычной ОС и веб-серверу обрабатывать доставку файлов. Использование обычных файлов избавляет вас от необходимости заново реализовывать обработку заголовков кэша HTTP и запросов диапазона.
Но в любом случае эти ресурсы нуждаются в URL, поэтому вторая часть вашего вопроса по-прежнему актуальна.
Если я настрою htaccess для предотвращения доступа к текущей папке, будет ли этого достаточно?
Я должен думать, что этого будет достаточно. Пока уникальная часть длинна (например, "somefolder / 738b3093b898654bd3bbb9e3770e7fc0.jpg") и не следует шаблону, невозможно угадать ее.
Но если вам действительно не нужен идентификатор пользователя в имени файла, избегайте его. Facebook включает в себя идентификатор профиля пользователя, который является частью имени файла фотографии, поэтому, когда люди делятся файлами фотографий где-то еще, это позволяет обнаружить их профиль Facebook и настоящее имя. Я видел, что это вызывает преследование и преследование во многих онлайн-сообществах. Это не вина пользователя - они понятия не имеют, что выдают свое настоящее имя или настоящее имя друга, опубликовав фотографию где-то.
Другое соображение заключается в том, что по мере роста такой системы, когда она получает огромное количество файлов, файловая система становится тяжелым бременем, если они находятся в одной папке. Вы можете легко предотвратить это, повторяя или разделяя часть имени в подпапках. Например, "somefolder / 7e / 7e8b3093b898654bd3bbb9e3770e7fc0.jpg".