Как в 2022 году решают вопрос с отдачей файлов?

Есть винтажный проект, где юзеры создают записи с файлами, которые могут скачать другие юзеры на основе рейтинга. Соответственно, все это дело на nginx, проверки на ратио и пр происходят в одном php файле, результаты запроса которого отображаются в лайтбоксе. (обрабатывается прямая ссылка на файл).
Сами файлы весят немного, поэтому вопрос об использовании внешнего хранилища не стоял.

Вопрос собственно в чем - какие лучшие практики отдать юзеру файл на скачку, сделав предварительно кучу проверок по 5! таблицам.
То есть порядок примерно такой для залогигенного юзера:
- чекаем, на месте ли файл физически
- получаем объект с файла с данными с разных таблиц (самый долгий процесс)
- хватает ли ратио для скачки

И потом отдаем на скачку и пишем обновленные данные в таблицы.

Я сначала думал, что сделать все проверки и генерацию ссылки на скачивание (асинхронно) в момент открытия страницы неплохо. А при скачке удалять временную ссылку. (и все остальные для юзера, если он открыл несколько страниц без скачивания). Но что-то я думаю, я не туда пошел.
Проходить все проверки не при открытии страницы, а в момент нажатия кнопки скачать (обработка прямых ссылок в лайтбоксе) - кажется тоже не очень вариантом. В общем хочется не перемудрить и сделать по красоте.
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
https://www.nginx.com/blog/validating-oauth-2-0-ac...

- чекаем, на месте ли файл физически (зачем???? он или есть или нет, и записей о нем не должно быть)
- получаем объект с файла с данными с разных таблиц (самый долгий процесс) ????? не нужно вообще вычислять. Файл вычисляется 1 раз при загрузке в дальнейшем используется его GUID

- хватает ли ратио для скачки (Как по мне самое простое)

Итак процесс такой.
1. загрузка файла
2. вставка его в таблицу files, только путь и мета данные сохраняете же в /var/www/data/randomguid (не доступная для веба папка)
3. при запросе скачивания тупо делается симлинк файл в папку /var/www/html/secure
4. симлинк доступен только авторизованному пользователю, см. мою ссылку
5. в таблице symlinks есть поле экспиратион соответствующий скрипт удаляет эти ссылки, после прохождения времени

ЗЫ опишите что у вас долго вычисляется и почему? Просто бизнес логику
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы