All streams
Search
Write a publication
Pull to refresh
30
0

PHP разработчик

Send message
В теории так можно и с облака mail.ru, хотя у них нет публичного апи, так что так сразу не подскажу. Но это только отдавать файл пользователю.

Зато их облако поддерживает webdav, можно поискать библиотеку или хоть курлом дергать, по аналогии с www.qed42.com/blog/using-curl-commands-webdav и fritool.ru/curl-for-webdav
Спасибо, поправил.
Случайно ответил чуть ниже.
Точно, вот что я упустил рассказать.

Во-первых время жизни токена Google Drive — 1 час. И нужно как-то провернуть его ротацию. На голых конфигах это сделать не получится. Можно с помощью luа или используя вот такой вот подход, как в посте, но нам нужно проверить не истекло ли время действия токена и, в случае чего, дернуть гугл, чтоб его обновить. А потом этот токен мы уже передадим nginx'y.

Во-вторых через X-Accel-Redirect удобно делать динамические ссылки и прятать реальные id файла на гуглдиске.
Например, мы хотим, чтоб загрузка у нас была по ссылке /dl/{long long random string}, которая проживет примерно час и только для какого-нибудь конкретного пользователя. Мы можем написать обвязку (не обязательно на php), все проверить и, в случае успеха, отдать файл через X-Accel-Redirect.

Условно как-то так
$condition = /*
    такой файл вообще существует
    AND пользователь имеет право скачать этот файл
    AND время действия динамической ссылки не истекло
    AND ссылка вообще запрашивалась именно этим пользователем
    AND еще куча проверок на наш вкус
*/;
    
if (!$condition) {
    http_response_code(404);
    echo 'Не удалось найти файл' . PHP_EOL;
    exit();
}

http_response_code(204);
header('File-Id: ' . $fileId);
header('Filename: ' . 'test.zip');
header('X-Accel-Redirect: ' . rawurlencode('/google_drive/' . TOKEN));

Латенси не очень, до 5 секунд. Примерно как в интерфейсе гуглдиска. Ассеты, например, раздавать не выйдет.

Да сейчас уже поздно, текущее решение хорошо работает. Дальше интересно копнуть в сторону телеграма: попробовать дробить файлы на куски и хранить в каком-нибудь приватном канале, а потом склеивать nginx'ом, но без lua (с lua любой дурак сможет). Проблема, естественно, с последним пунктом.

Для коммерческого проекта, я думаю, вообще не стоит. Но коммерческий проект и предполагает финансовые вложения. А у меня был оплачен гуглдиск на ближайший год и хотелось развернуться на том, что есть. И еще надо куда-то было девать любовь к экспериментам :)

Спасибо, посмотрел — очень интересная штука.
Но раздавать получится только с поддерживаемых сервисов, насколько я понял, т.е. соц.сети и мессенджеры отпадают.

Ну и гуглдиск за деньги это использую лично я. У кого студенческий, это выйдет бесплатно. У кого файлы меньше 50мб — можно любой объем (покуда совесть позволяет) хоть в телеграме хранить и по bot api раздавать, до 2гб по user api.

Ну, тут не только X-Accel-Redirect все же.
Да, php и fpm сугубо опциональны. Можно было хоть псевдокодом написать.


Насчет хранилищ — да, все верно. Может, даже дешевле гуглдиска. Но тогда бы не было этой статьи :).

Пробовал ocamlfuse — не понравилось.
Больше задержка и потребление CPU в районе 25% ядра на один запрос (с nginx 1-2%).

12 ...
7

Information

Rating
Does not participate
Location
Украина
Registered
Activity