Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 21.11.2017 12:23:46

как организовать продажу файлов (цифрового контента)

Здравствуйте.

Прошу подсказать верное направление новичку.

Задача в целом: организовать продажу файлов.
Файлы только мои, юзеры ничего не заливают.
Пусть будут, например, картинки (типа личный фотосток). Юзеру после оплаты картинка становится доступной для скачивания (бесконечно долго).

И тут у меня возникает множество проблем. Где хранить эти файлы? Если в public-каталогах - то как быть с прямыми линками на файл (типа img/file.jpg), которые идут мимо маршрутизатора? Если в другом месте - то как их выдавать на скачивание? Каждый раз копировать в public и менять имя файла на трудноугадываемое, типа h3kjh2l32333y323sdf_file.jpg? Тогда со временем скопится куча одинаковых файлов с разными именами.

Собственно, вопрос: как грамотно организовать систему продажи файлов? Можно без конкретного кода, просто концепцию подскажите. Может, готовая библиотека какая-то есть? Гугл не помог.

Не в сети

#2 21.11.2017 13:31:00

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: как организовать продажу файлов (цифрового контента)

Кажется такие вещи на коленке не делаются. Первое что приходит на ум cdn нужен на котором файлы хранить на другом сервере чем морда сайта. И его дергать по API с морды на которой ларавель. А на морде регистрация, авторизация, подписка на платные услуги и личный кабинет в котором хранятся купленные картинки

Не в сети

#3 21.11.2017 17:30:45

Re: как организовать продажу файлов (цифрового контента)

Спасибо за идею. Соорудил вот такой код для проверки:

Route::get('test', function(){
	if (true){ //проверяем, можно ли отдавать файл
		$filename = '1.jpg';
		$file = Storage::disk('local')->get($filename);
		return response($file)->header("Content-disposition", "attachment; filename=$filename")->header("Content-Type", "jpeg");
	}
});

Вроде делает, то что требуется. Что скажете? Рабочий вариант?

Изменено dimatti (21.11.2017 17:31:59)

Не в сети

#4 21.11.2017 17:46:32

Re: как организовать продажу файлов (цифрового контента)

Вроде делает, то что требуется. Что скажете? Рабочий вариант?

Сейчас нет кода ларавела под рукой.

		$file = Storage::disk('local')->get($filename);

Что этим делается? Считывается весь файл?
Если да - то, хватит ли тебе ОЗУ для отдачи больших файлов?

Изменено covobo (21.11.2017 17:48:20)

Не в сети

#5 21.11.2017 17:51:32

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: как организовать продажу файлов (цифрового контента)

Класть эти изображения в хранилище (storage), и к примеру по роуту /image/get/123 отдавать это изображение. Перед отдачей проверять пользователя на возможность скачивать изображения. Ну а способов проверки масса, можно группы сделать, или тупо столбец в таблицу users добавить типо is_subscriber tinyint(1) default(0) и когда пользователь купил подписку, то ставить в это поле 1

Не в сети

#6 21.11.2017 18:17:53

Re: как организовать продажу файлов (цифрового контента)

Что этим делается? Считывается весь файл?Если да - то, хватит ли тебе ОЗУ для отдачи больших файлов?

Да, считывается весь файл.
Больших файлов не планируется. Максимум - единицы мегабайт.

Спасибо всем за помощь.

Изменено dimatti (21.11.2017 18:19:58)

Не в сети

#7 21.11.2017 19:11:27

Re: как организовать продажу файлов (цифрового контента)

Отдача статики через PHP это плохая идея, в первую очередь из-за производительности. Такую статику уже не загрузишь на CDN, ее нельзя докачать или скачать в несколько потоков (HTTP Range), также вместо обработки, например, 1000 запросов страниц в секунду мы получаем 1000 запросов и на статику, и на обычные страницы, а учитывая что картинок на странице может быть пара десятков, то реальное число обрабатываемых страниц от клиентов будет 1000/30 = 33!

Это не говоря о том, что почти наверняка запрос к скрипту вызовет обновление сессии и/или другие запросы/действия с ФС, которые совершенно излишни.

Используйте стандартные средства. Веб-сервер - это именно то, что заточено под раздачу статики. nginx, который и так у всех есть, имеет отличный модуль, который позволяет создавать временные ссылки на файлы по любому локальному пути. Файлы легко вынести на отдельный сервер(а), т.к. для авторизации ссылок в nginx нужен только хэш, никаких БД или другой связи с бекендом не нужно.

Этот вопрос стабильно появляется на форуме раз в три месяца. Предыдущие темы:
https://laravel.ru/forum/viewtopic.php?pid=11827#p11827
https://laravel.ru/forum/viewtopic.php?pid=12942#p12942

Не в сети

#8 12.12.2017 05:25:55

Re: как организовать продажу файлов (цифрового контента)

deleted

Изменено dimatti (28.02.2018 06:16:44)

Не в сети

Подвал раздела