Я бы создал "случайное" имя файла.Файлы могут быть сохранены либо в одном каталоге, либо в структуре сгенерированных каталогов, например dir01, dir02, dir03.Отдельные каталоги лучше подходят для действительно большого количества файлов.Я думаю, что вы не должны хранить более 10K файлов в одном каталоге.Если у вас есть больше файлов, создайте новый каталог каждый раз, когда счетчик прибывает в 10K.
Все метаданные файлов, включая физический путь в файловой системе, должны храниться в БД.Таблица файлов может содержать внешний ключ к таблице пользователей, поэтому вы всегда можете узнать владельца файла.
Этот дизайн является масштабируемым: в будущем вы можете хранить разные каталоги на отдельных дисках или даже использовать систему CDN.Это достаточно безопасно.Невозможно угадать, как вы кодируете метаданные файла в имя файла, потому что вы ничего не кодируете: вы просто создаете случайное имя.Это просто и мощно.Все данные находятся в БД, поэтому вы можете добавлять новые функции в будущем и запускать их на старых данных в БД.