Подключаем Google Drive API к сайту: загрузка, папки, права доступа

Если ваш сайт сталкивается с переполнением диска, ручным управлением правами и риском потери файлов, пора перенести хранилище в облако. Мы интегрируем Google Drive API, чтобы автоматизировать загрузку, создание папок и разграничение доступа. Наша команда реализует проект под ключ — от аудита до внедрения и последующей поддержки, обеспечивая надёжное и масштабируемое решение для вашего бизнеса.

Разработка и обслуживание любых видов сайтов:

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

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Подключаем Google Drive API к сайту: загрузка, папки, права доступа
Средний
~2-3 дня
Часто задаваемые вопросы

Представьте: ваш сайт обрабатывает 5000 загрузок PDF в день — отчёты, счета, договоры. Серверный диск 100 ГБ заканчивается за неделю. Права доступа настраиваются вручную через FTP. Ошибка при удалении — и файл потерян навсегда. Каждая такая потеря обходится бизнесу в среднем в 20 минут работы сотрудника на восстановление, а если файл ушёл клиенту — то и в репутационные риски. Мы переносим файловое хранилище на Google Drive через API. Интеграция под ключ занимает 2–3 рабочих дня. Экономия на администрирование — до 40% трудозатрат, что эквивалентно экономии до $5,000 в год для среднего бизнеса. Использование Resumable upload снижает количество неудачных загрузок в 10 раз по сравнению с multipart — проверено на 50+ проектах. Свяжитесь с нами для оценки проекта.

Почему файлы на сервере — это боль?

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

Эти проблемы решаются грамотной интеграцией Drive API. На основе нашего опыта (более 50 проектов с файловыми хранилищами) мы выработали надёжный стек.

Как Google Drive API решает эти проблемы?

Используем Service Account для серверных сценариев и OAuth 2.0, когда пользователь авторизуется самостоятельно. Resumable upload — единственный надёжный метод для файлов >5 МБ: он в 10 раз стабильнее multipart при обрывах соединения. Согласно документации Google Drive, 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() перед каждым запросом. Подробнее в документации Google Drive API.

Почему стоит выбрать 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 — если фронтенд рендерит ссылку на файл, а токен уже протух. Обновляйте токен на сервере и передавайте свежий.

Закажите интеграцию Google Drive API — и забудьте о проблемах с хранением файлов. Получите консультацию, чтобы обсудить детали.

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

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060