Laravel по-русски

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

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

#1 28.06.2017 11:49:56

Хранение файлов пользователей

Пишем сервис - узко специализированное облако.
Задача: хранить файлы которые загружает юзер.
До 3 мб, до 5 файлов нв пользователя, файл удаляется через 60 часов.
Подскажите разумно ли использовать сам laravel для этого или лучше чьё-то API, как google или dropbox?
Важно чтоб файлы были доступны нескольким юзерам (если api), например 1 человек залил, второй посмотрел.
Кто-то уже реализовывал подобное, если да, поделитесь пожалуйста опытои.

Не в сети

#2 28.06.2017 17:11:00

Re: Хранение файлов пользователей

Файлы, которые загружаются пользователями, в любом случае лучше хранить где-то в другом месте (не обязательно в облаке типа S3, можно и просто на другом сервере). Это более безопасно и оптимальнее по ресурсам.

Если файлы нужно просто отдавать без авторизации, привязки по IP и прочего (т.е. пришёл нужный URL, по нему отдаём кому угодно) — то при загрузке просто генерируются случайные имя файлов и из них получается URL. Таким образом, запросы будут идти напрямую на файловый сервер.

https://server1.foo.com/gkxtgtuy1egmjp0whd22j11kz9axk6cdfk9yl2pe/myfile.zip
=> /mnt/disk1/gkxtgtuy1egmjp0whd22j11kz9axk6cdfk9yl2pe/myfile.zip

Если же URL для каждого клиента разный и клиентов нужно предварительно проверять, то вначале запрос на скачивание идёт на обычный сервер с Laravel (где авторизация и весь основной движок), сервер проверяет всё, что нужно, и если клиент авторизован — то генерирует URL с подписью. Дальше делается редирект на этот URL и клиент отправляется на файловый сервер.

https://foo.com/dl/1847351
=> https://server1.foo.com/kn3g58cfqhfsr1f4sbbt600pob1kzhpxh2ky09g9/myfile.zip
=> /mnt/disk1/sk1hmk9nfstsgvz684da/myfile.zip

Что такое «подпись» зависит от файлового сервера. Если сервер свой, то для nginx есть отличный модуль ngx_http_secure_link_module — в Laravel генерируешь MD5-хэш от секрета, передаёшь этот хэш в URL, nginx после получения запроса генерирует аналогичный хэш и сравнивает его с тем, который передал клиент. Если совпали — файл загружается, если нет — 403. Хэш можно привязывать к разным переменным, включая время и IP.

Не в сети

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