prehistory
E naʻo le mea na tupu na ou manaʻomia e teu ai le sili atu i le 1.5 TB o faʻamaumauga i se mea, ma tuʻuina atu foi le gafatia mo tagata masani e faʻapipiʻi ai e ala i se fesoʻotaʻiga tuusaʻo. Talu ai e masani lava o ia aofaiga o manatua e alu i le VDS, o le tau o le mautotogi lea e le o aofia tele i le paketi o le poloketi mai le vaega "leai se mea e fai", ma mai le faʻamatalaga faʻamatalaga na ou maua ai se VPS 400GB SSD, lea, e tusa lava pe ou te mana'o i ai, e le mafai ona ou tuʻuina le 1.5TB o ata e aunoa ma le faʻamalosi faʻamalosi o le a manuia.
Ona ou manatua lea afai ou te tapeina mea leaga mai le Google Drive, e pei o polokalama e na o le Windows XP, ma isi mea ua siitia mai le tasi masini i le isi talu mai aso na le televave ai le Initaneti e le gata ( mo se faʻataʻitaʻiga, o na 10-20 versions of the virtual box e foliga mai e leai se aoga e ese mai i le nostalgic), ona tatau lea ona fetaui lelei mea uma. E le'i leva ona fai. Ma o lea, o le solia o le tapulaʻa i luga o le numera o talosaga i le api (i le ala, lagolago faʻapitoa e aunoa ma ni faʻafitauli na faʻateleina ai le aofaʻi o talosaga mo le tagata faʻaoga i le 100 i le 10 sekone), o faʻamatalaga vave na tafe atu i le nofoaga o lona faʻaogaina atili. .
E foliga mai e lelei mea uma, ae o lea e manaʻomia le tuʻuina atu i le tagata faʻaaoga mulimuli. E le gata i lea, e aunoa ma se toe faʻafeiloaʻi i isi punaoa, ae ia na o le oomi e se tagata le ki "Download" ma avea ma tagata fiafia o le faila taua.
O iinei, i le Atua, na ou oo ai i ituaiga uma o faafitauli. I le taimi muamua o se tusitusiga i le AmPHP, ae ou te leʻi faamalieina i le uta na ia faia (o se oso malosi i le amataga i le 100% taumafa autu). Ona sau ai lea o le curl wrapper mo ReactPHP, lea e fetaui lelei ma oʻu manaʻoga i tulaga o le aofaʻi o taamilosaga CPU na faʻaaogaina, ae na te leʻi tuʻuina atu le saoasaoa i mea uma ou te manaʻo ai (na foliga mai e mafai ona e faʻaitiitia le va o le valaʻau. curl_multi_select, ae o loʻo i ai le tatou 'ai'ai tutusa ma le filifiliga muamua). Na ou taumafai foi e tusi se tamai auaunaga i Rust, ma sa vave ona galue (e ofo ai na aoga, ona o loʻu iloa), ae na ou manaʻo atili, ma e faigata tele ona faʻavasegaina. E le gata i lea, o nei fofo uma na faʻafefeteina le tali, ma na ou manaʻo e siaki le taimi na maeʻa ai le faila download ma le saʻo sili.
I se tulaga lautele, sa piopio mo sina taimi, ae sa aoga. Seia oʻo i se tasi aso na ou sau ai ma se manatu e ofoofogia i lona valea: nginx, i le teori, e mafai ona faia le mea ou te manaʻo ai, galue vave, ma faʻatagaina ituaiga uma o faʻalavelave faʻatasi ma le faʻatulagaina. E tatau ona tatou taumafai - ae faapefea pe a aoga? Ma ina ua mavae le afa aso o sailiga faifaipea, na fanau mai ai se fofo sa galue mausali mo ni nai masina ma ausia uma oʻu manaʻoga.
Faʻatulagaina NGINX
# Первым делом создадим в конфигах нашего сайта отдельную локацию.
location ~* ^/google_drive/(.+)$ {
# И закроем её от посторонних глаз (рук, ног и прочих частей тела).
internal;
# Ограничим пользователям скорость до разумных пределов (я за равноправие).
limit_rate 1m;
# А чтоб nginx мог найти сервера google drive укажем ему адрес резолвера.
resolver 8.8.8.8;
# Cоберем путь к нашему файлу (мы потом передадим его заголовками).
set $download_url https://www.googleapis.com/drive/v3/files/$upstream_http_file_id?alt=media;
# А так же Content-Disposition заголовок, имя файла мы передадим опять же в заголовках.
set $content_disposition 'attachment; filename="$upstream_http_filename"';
# Запретим буфферизировать ответ на диск.
proxy_max_temp_file_size 0;
# И, что немаловажно, передадим заголовок с токеном (не знаю почему, но в заголовках из $http_upstream токен передать не получилось. Вернее передать получилось, но скорей всего его где-то нужно экранировать, потому что гугл отдает ошибку авторизации).
proxy_set_header Authorization 'Bearer $1';
# И все, осталось отправить запрос гуглу по ранее собранному нами адресу.
proxy_pass $download_url;
# А чтоб у пользователя при скачивании отобразилось правильное имя файла мы добавим соответствующий заголовок.
add_header Content-Disposition $content_disposition;
# Опционально можно поубирать ненужные нам заголовки от гугла.
proxy_hide_header Content-Disposition;
proxy_hide_header Alt-Svc;
proxy_hide_header Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Vary;
proxy_hide_header X-Goog-Hash;
proxy_hide_header X-GUploader-UploadID;
}
O se faʻamatalaga puupuu e aunoa ma ni faʻamatalaga e mafai ona vaʻaia i lalo o le spoiler
location ~* ^/google_drive/(.+)$ {
internal;
limit_rate 1m;
resolver 8.8.8.8;
set $download_url https://www.googleapis.com/drive/v3/files/$upstream_http_file_id?alt=media;
set $content_disposition 'attachment; filename="$upstream_http_filename"';
proxy_max_temp_file_size 0;
proxy_set_header Authorization 'Bearer $1';
proxy_pass $download_url;
add_header Content-Disposition $content_disposition;
proxy_hide_header Content-Disposition;
proxy_hide_header Alt-Svc;
proxy_hide_header Expires;
proxy_hide_header Cache-Control;
proxy_hide_header Vary;
proxy_hide_header X-Goog-Hash;
proxy_hide_header X-GUploader-UploadID;
}
O loʻo matou tusia se tala e faʻatautaia ai nei fiafiaga uma
O le faʻataʻitaʻiga o le a iai ile PHP ma tusia ma le loto i ai ma se pusa laʻititi. Ou te manatu o soʻo se tasi e iai le poto masani i soʻo se isi gagana o le a mafai ona tuʻufaʻatasia lenei vaega e faʻaaoga ai laʻu faʻataʻitaʻiga.
<?php
# Токен для Google Drive Api.
define('TOKEN', '*****');
# ID файла на гугл диске
$fileId = 'abcdefghijklmnopqrstuvwxyz1234567890';
# Опционально, но так как мы не передаем никаких данных - почему бы и нет?
http_response_code(204);
# Зададим заголовок c ID файла (в конфигах nginx мы потом получим его как $upstream_http_file_id).
header('File-Id: ' . $fileId);
# И заголовок с именем файла (соответственно $upstream_http_filename).
header('Filename: ' . 'test.zip');
# Внутренний редирект. А еще в адресе мы передадим токен, тот самый, что мы получаем из $1 в nginx.
header('X-Accel-Redirect: ' . rawurlencode('/google_drive/' . TOKEN));
O taunuʻuga
I se tulaga lautele, o lenei metotia e faigofie tele ai le faʻatulagaina o le tufatufaina o faila i tagata faʻaoga mai soʻo se ao teuina. Ioe, e oʻo lava mai le telegram poʻo le VK, (pe a faʻapea o le faila faila e le sili atu i le tele faʻatagaina o lenei teuina). Sa ou maua se manatu faapena
Faafetai mo lou gauai mai. Ou te faʻamoemoe o laʻu tala sa sili ona manaia pe aoga ia te oe.
puna: www.habr.com