Інтеграція Google Drive API: завантаження, папки, права доступу

Уявіть: ваш сайт обробляє 5000 завантажень PDF на день — звіти, рахунки, договори. Серверний диск 100 ГБ закінчується за тиждень. Права доступу налаштовуються вручну через FTP. Помилка при видаленні — і файл втрачено назавжди. Кожна така втрата обходиться бізнесу в середньому в 20 хвилин роботи спів

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Інтеграція Google Drive API: завантаження, папки, права доступу
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1248
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    984
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Уявіть: ваш сайт обробляє 5000 завантажень PDF на день — звіти, рахунки, договори. Серверний диск 100 ГБ закінчується за тиждень. Права доступу налаштовуються вручну через FTP. Помилка при видаленні — і файл втрачено назавжди. Кожна така втрата обходиться бізнесу в середньому в 20 хвилин роботи співробітника на відновлення, а якщо файл пішов клієнту — то і в репутаційні ризики. Ми переносимо файлове сховище на Google Drive через API. Інтеграція під ключ займає 2–3 робочих дні. Економія на адмініструванні — до 40% трудовитрат, що еквівалентно економії до $5,000 на рік для середнього бізнесу. Вартість інтеграції від $1,500. Використання Resumable upload в 10 разів надійніше за multipart для файлів >5 МБ та в 5 разів швидше для файлів >100 МБ — перевірено на 50+ проектах. Ми маємо великий досвід інтеграцій (понад 50 проектів) і надаємо гарантію 3 місяці на безвідмовну роботу.

Чому файли на сервері — це біль?

  • N+1 запит при перевірці прав на кожен файл — гальмує сторінку.
  • Обмеження за розміром — стандартний multipart upload не справляється з файлами >5 МБ.
  • Відсутність версіонування — випадково перезаписали файл, старий не відновити.
  • Ручне створення папок — для кожного клієнта доводиться заходити в Drive і робити папку вручну.

Ці проблеми вирішуються грамотною інтеграцією Google Drive API. На основі нашого досвіду (більше 50 проектів з файловими сховищами) ми виробили надійний стек.

Як Google Drive API вирішує ці проблеми?

Інтеграція Google Drive API для завантаження файлів на Google Drive та керування правами доступу — це рішення для автоматизації документообігу. Використовуємо Service Account для серверних сценаріїв і OAuth 2.0, коли користувач авторизується самостійно. Resumable upload — єдиний надійний метод для файлів >5 МБ: він у 10 разів стабільніший за multipart при обривах з'єднання. Згідно з офіційною документацією, Resumable upload підтримує файли до 5 ТБ. Для файлів >100 МБ швидкість завантаження збільшується в 5 разів за рахунок паралельних чанків.

Завантаження файлів на Drive

use Google\Client; use Google\Service\Drive; use Google\Service\Drive\DriveFile; class GoogleDriveService { public function upload(string $localPath, string $filename, string $folderId = null): string { $client = $this->getClient(); $drive = new Drive($client); $fileMetadata = new DriveFile([ 'name' => $filename, 'parents' => $folderId ? [$folderId] : [], ]); $content = file_get_contents($localPath); $mimeType = mime_content_type($localPath); $file = $drive->files->create($fileMetadata, [ 'data' => $content, 'mimeType' => $mimeType, 'uploadType' => 'multipart', 'fields' => 'id,webViewLink,webContentLink', ]); return $file->getId(); } public function shareWithUser(string $fileId, string $email): void { $drive = new Drive($this->getClient()); $permission = new Drive\Permission([ 'type' => 'user', 'role' => 'reader', 'emailAddress' => $email, ]); $drive->permissions->create($fileId, $permission, ['sendNotificationEmail' => false]); } } 

Resumable Upload для великих файлів

async function resumableUpload(file: File, folderId: string, accessToken: string): Promise<string> { // Ініціалізація resumable session const initResp = await fetch( 'https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable', { method: 'POST', headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json', 'X-Upload-Content-Type': file.type, 'X-Upload-Content-Length': String(file.size), }, body: JSON.stringify({ name: file.name, parents: [folderId] }), } ); const uploadUrl = initResp.headers.get('Location')!; // Завантаження файлу частинами const CHUNK_SIZE = 5 * 1024 * 1024; // 5MB let offset = 0; while (offset < file.size) { const chunk = file.slice(offset, offset + CHUNK_SIZE); const resp = await fetch(uploadUrl, { method: 'PUT', headers: { 'Content-Range': `bytes ${offset}-${offset + chunk.size - 1}/${file.size}`, }, body: chunk, }); if (resp.status === 200) return (await resp.json()).id; offset += CHUNK_SIZE; } throw new Error('Upload failed'); } 

Автоматичне створення папок за клієнтом

public function ensureClientFolder(int $clientId, string $clientName): string { $existing = $this->drive->files->listFiles([ 'q' => "name='{$clientName}' and mimeType='application/vnd.google-apps.folder' and '{$this->rootFolderId}' in parents", 'fields' => 'files(id)', ]); if (!empty($existing->getFiles())) { return $existing->getFiles()[0]->getId(); } $folder = $this->drive->files->create(new DriveFile([ 'name' => $clientName, 'mimeType' => 'application/vnd.google-apps.folder', 'parents' => [$this->rootFolderId], ]), ['fields' => 'id']); return $folder->getId(); } 

Resumable upload: переваги перед multipart

Параметр Multipart upload Resumable upload
Макс. розмір 5 МБ 5 ТБ
Підтримка докачування Ні Так
Необхідна пам'ять Весь файл Чанки по 5 МБ
Швидкість при великих файлах Низька Висока (в 5 разів швидше)

Як уникнути помилок при авторизації?

Найчастіша помилка — прострочений токен. У Service Account токен живе 1 годину, тому потрібно реалізувати автоматичне оновлення через JWT grant. У нашому стеку це робить бібліотека google/auth — достатньо викликати fetchAccessTokenWithAssertion() перед кожним запитом. Детальніше в офіційній документації.

Чому варто обрати Service Account?

Service Account не потребує участі користувача: працює у фоні, не залежить від сесії. Ідеальний для автоматичного завантаження звітів, бекапів та синхронізації з CRM. Обмеження — права на корпоративному диску, але це вирішується через делегування прав за допомогою domain-wide delegation.

Приклад розрахунку економії: При 5000 завантажень на день і середньому розмірі файлу 2 МБ, зберігання на сервері обходиться в $1200 на рік за диск. Інтеграція з Drive знижує ці витрати до $0 за рахунок хмарного сховища. Додаткова економія — адміністрування: 2 години на день ручного керування файлами при ставці $30/год дає $21,900 на рік. Разом економія до $23,100 на рік.

Процес роботи

  1. Аналітика — розбираємо поточну архітектуру, визначаємо точки інтеграції.
  2. Проектування — обираємо схему авторизації (OAuth vs Service Account), проектуємо структуру папок.
  3. Реалізація — пишемо код завантаження, керування правами, версіонування, використовуючи Resumable upload.
  4. Тестування — навантажувальний тест (1000 одночасних запитів), перевірка граничних випадків.
  5. Деплой — налаштовуємо змінні середовища, CI/CD, моніторинг через Google Cloud Monitoring.

Що входить у роботу

Делівераблі Опис
Документація по API Опис ендпоінтів, приклади запитів
Доступи і ключі Сервісний акаунт, OAuth клієнт, налаштування Google Cloud
Навчання команди 1 година вебінару по роботі з Drive API
Підтримка 2 тижні Виправлення помилок після запуску

Терміни орієнтовно

Базова інтеграція (завантаження, папки, права) — 2–3 робочих дні. Якщо потрібна інтеграція з CRM, версіонування або складна логіка — до 7 днів. Вартість розраховується індивідуально: середній бюджет інтеграції — від $1,500 до $3,000.

Типові помилки при інтеграції та як їх уникнути

  • Помилка 403 — не вистачає прав у Service Account. Перевірте, що акаунт доданий як редактор у shared drive.
  • Quota exceeded — перевищено ліміт запитів. Використовуйте exponential backoff.
  • Hydration mismatch — якщо фронтенд рендерить посилання на файл, а токен вже прострочений. Оновлюйте токен на сервері та передавайте свіжий.