Я в своем проекте использовал s3 compatible хранилище - minio.
На фронте создавалась задача, задача записывалась в субд и через redis stream запускалась в отдельном контейнере. После создания файла он клался в s3 (в отдельный бакет в зависимости от типа таска), а в субд у таски менялся статус и добавлялась ссылка на файл. В итоге есть и прямая ссылка на файл, и и удобный веб файловый менеджер и различные полиси (хранить файл или ссылку n дней, и тд)
На фронте создавалась задача, задача записывалась в субд и через redis stream запускалась в отдельном контейнере. После создания файла он клался в s3 (в отдельный бакет в зависимости от типа таска), а в субд у таски менялся статус и добавлялась ссылка на файл. В итоге есть и прямая ссылка на файл, и и удобный веб файловый менеджер и различные полиси (хранить файл или ссылку n дней, и тд)