В таблице БД есть поле, хранящее содержимое файла, например, data:application/pdf;base64.
Необходимо позволить пользователю скачать/посмотреть файл.
Пока вижу 2 вариант: 1) создать временную непубличную ссылку на скачивание; 2) передать содержимое через response.
Прошу показать решение.
Люций Мунинг, если положить файлы в отдельную папку и все обращения к файлам этой папки обрабатывать в скрипте, тогда никаких проблем с безопасностью не будет... А ещё можно хранить файл за пределами публичной папки
JhaoDa, хорошо, т.е. получается так в итоге: во время аплодинга файла: 1) создаем файлу уникальное имя, 2) сохраняем в закрытом каталоге с новым уникальным именем. 3) в таблице создаем запись, содержащую исходное имя файла, относительный путь (относительно каталога хранения, например, storage/user-files/), mime-расширение файла, новое имя.
А для получения файла - создаем роут и метод контролера, в котором: 1) проверяем авторизованного пользователя и владельца файла, 2) передаем через response()->file binary-содержимое, в котором добавляем исходное имя файла и расширение.
Единственный момент - как передать в метод скачивания специальное имя файла.
Делаю так: response()->download($path), передается уникальное имя хранимого файла, а хочется чтобы файл скачивался с именем файла, изначально загруженного.
Если в download вторым параметром передать имя на английском языке - то окей, работает.
А если русскоязычное, то получаю ошибку:
The filename fallback must only contain ASCII characters