В зависимости от того, сколько кода вы хотите написать, есть много способов справиться с этим.Последнее, что я использовал, было немного сложным из-за множества требований безопасности.В двух словах это было так:
- Создать таблицу с основными данными для каждого загруженного / сохраненного файла.
Это включает в себя в основном все параметры, которые загружаемая библиотека выводит после обработки файла, а также некоторые дополнительные, такие как идентификатор группы пользователей (поскольку каждый файл может быть просмотрен только определенной группой пользователей), доступный флаг Y / N и дата мягкого удаления.
Создание контроллера загрузок, который будет обрабатывать все задачи, связанные с загрузкой
Я создал несколько методов внутри, поставив задачу убедиться, что пользователю действительно разрешен доступ к этому конкретному файлу (илиесли его перенаправить на страницу с ошибкой) Файл находится в корзине S3, кстати, смонтирован на моем веб-сервере с s3fs, но это не имеет значения.То, что вам нужно, не зависит от того, где на самом деле находится файл.
Создание неочевидных ссылок для загрузки
Вместо ссылки на example.com/files/filename.pdf
(что упрощает сбор файлов), мои ссылки для загрузки указывают на определенный метод в моем контроллере загрузки(downloads / get_file) и передает неочевидный идентификатор в качестве параметра.IIRC Я использовал параметр зашифрованного rawname, поэтому ссылки выглядят как
<a href="mysite.com/downloads/get_file/hdhekfnflsufdifnfbs">get hello.pdf here</a>
Найти файл, передать его пользователю
При переходе по вышеуказанной ссылке метод get_file принимает в качестве параметра необработанное имя, находит файл в таблице (получает локальный путь) и выводит его в браузер.Таким образом, пользователь никогда не увидит реальный маршрут / парх или даже реальное имя файла как сохраненное на диске.