JavaRush /Курси /Модуль 4: FastAPI /Інтеграція з Google Drive API: як завантажувати та керува...

Інтеграція з Google Drive API: як завантажувати та керувати файлами

Модуль 4: FastAPI
Рівень 17 , Лекція 4
Відкрита

Коротко: Google Drive API дає змогу твоєму застосунку "подружитися" з Google Диском. Ти можеш завантажувати файли (не вручну, а реально через код), створювати папки, сортувати все це добро, отримувати інформацію про файли, шукати потрібне, видаляти та оновлювати вміст — як повноцінний адмін, але через API.

Навіщо це може знадобитись? Уяви реальний застосунок, де користувачі зберігають резюме, скани, фото — все це треба десь тримати. Або, скажімо, ти робиш автоматичну синхронізацію документів, бекап, або просто даєш користувачу можливість скачати потрібний файл прямо із твого сервісу.

І тут Drive API дуже доречний. Він дозволяє реалізувати все це гнучко й надійно.


Налаштування Google Drive API

Перш ніж кидатися в код — потрібно підготувати середовище для роботи.

Створення проєкту в Google Cloud Console

  1. Зайди в Google Cloud Console.
  2. Натисни кнопку «Створити проєкт».
  3. Вкажи назву проєкту (наприклад, FastAPI_GoogleDrive_Demo).
  4. Після створення перейдіть в "API і сервіси" → "Бібліотека" і увімкни Google Drive API.

Налаштування сервісного акаунта

  1. Перейдіть в "API і сервіси" → "Облікові дані".
  2. Натисни "Створити облікові дані" → "Сервісний акаунт".
  3. Дай назву, наприклад drive-service-account, і обери роль «Редактор» (Editor).
  4. Після створення сервісного акаунта завантаж JSON-файл з ключем.
    • Цей JSON-файл знадобиться нам для аутентифікації в коді.

Права доступу

  1. У Google Drive (через браузер) створи тестову папку.
  2. Надай доступ сервісному акаунту (email з JSON-файлу) на рівні цієї папки.

Підключення Google Drive API в FastAPI

Для взаємодії з Google Drive API будемо використовувати бібліотеку google-api-python-client та кілька додаткових:

pip install google-api-python-client google-auth google-auth-httplib2 google-auth-oauthlib

Ці бібліотеки допоможуть налаштувати аутентифікацію і працювати з API.

У проєкті створюємо файл google_drive.py. Цей модуль відповідатиме за інтеграцію з Drive:


from google.oauth2 import service_account
from googleapiclient.discovery import build

# Завантаження JSON-файлу з ключем
CREDENTIALS_FILE = "path/to/your/credentials.json"

# Налаштовуємо права доступу для API
SCOPES = ['https://www.googleapis.com/auth/drive']

def build_drive_service():
    # Створюємо об'єкт авторизації
    credentials = service_account.Credentials.from_service_account_file(
        CREDENTIALS_FILE, scopes=SCOPES
    )
    # Створюємо обгортку для взаємодії з API
    service = build('drive', 'v3', credentials=credentials)
    return service

Тепер у нас є функція build_drive_service(), яка повертає об'єкт для роботи з Google Drive API.


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

Додамо функцію завантаження файлу в google_drive.py:


def upload_file(file_name, file_path, mime_type, parent_folder_id=None):
    service = build_drive_service()

    # Формуємо метадані файлу
    file_metadata = {
        'name': file_name,
    }
    if parent_folder_id:
        file_metadata['parents'] = [parent_folder_id]

    # Завантажуємо файл
    media = MediaFileUpload(file_path, mimetype=mime_type)
    uploaded_file = service.files().create(
        body=file_metadata,
        media_body=media,
        fields='id, name'
    ).execute()

    return uploaded_file
  • file_name — ім'я файлу, яке відображатиметься у Drive.
  • file_path — шлях до файлу на твоєму диску.
  • mime_type — тип файлу (наприклад, application/pdf для PDF або image/jpeg для JPEG).
  • parent_folder_id — ID папки, куди буде завантажено файл (опційно).

Додамо endpoint для завантаження файлів в main.py:


from fastapi import FastAPI, File, UploadFile
from google_drive import upload_file

app = FastAPI()

@app.post("/upload/")
async def upload_to_drive(file: UploadFile = File(...)):
    # Зберігаємо тимчасовий файл
    with open(file.filename, "wb") as temp_file:
        temp_file.write(await file.read())

    # Завантажуємо файл у Google Drive
    uploaded_file = upload_file(
        file_name=file.filename,
        file_path=file.filename,
        mime_type=file.content_type,
    )

    return {"file_id": uploaded_file.get("id"), "name": uploaded_file.get("name")}

Протестуємо:

  1. Запусти FastAPI-застосунок:
    uvicorn main:app --reload
    
  2. Через Swagger UI (http://127.0.0.1:8000/docs) завантаж файл.
  3. Перевір, чи з'явився файл у твоїй папці Google Drive.

Керування файлами та папками

Додамо функцію для створення папок у Google Drive:


def create_folder(folder_name, parent_folder_id=None):
    service = build_drive_service()

    folder_metadata = {
        'name': folder_name,
        'mimeType': 'application/vnd.google-apps.folder'
    }
    if parent_folder_id:
        folder_metadata['parents'] = [parent_folder_id]

    folder = service.files().create(
        body=folder_metadata,
        fields='id, name'
    ).execute()

    return folder

Видалення файлу або папки:


def delete_file(file_id):
    service = build_drive_service()
    service.files().delete(fileId=file_id).execute()

Тепер у нас є можливість створювати папки і видаляти файли.


Приклад: завантаження файлів у конкретну папку

Припустимо, ми хочемо завантажувати всі файли в заздалегідь підготовлену папку. Для цього:

  1. Створи папку в Google Drive і скопіюй її ID.
  2. Використовуй parent_folder_id з попередніх функцій.

Приклад endpoint'у FastAPI:


@app.post("/upload_to_folder/")
async def upload_file_to_folder(file: UploadFile = File(...), folder_id: str):
    with open(file.filename, "wb") as temp_file:
        temp_file.write(await file.read())

    uploaded_file = upload_file(
        file_name=file.filename,
        file_path=file.filename,
        mime_type=file.content_type,
        parent_folder_id=folder_id
    )

    return {"file_id": uploaded_file.get("id"), "name": uploaded_file.get("name")}

Чек-лист того, що ми дізналися

  • Інтегрували Google Drive API з FastAPI.
  • Створили сервісний акаунт для аутентифікації.
  • Розробили функції для завантаження файлів, створення папок і видалення файлів.
  • Реалізували endpoint'и для завантаження файлів у FastAPI-застосунку.

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

Для додаткової інформації і довідки звернися до офіційної документації Google Drive API.

3
Опитування
Робота з Google API, рівень 17, лекція 4
Недоступний
Робота з Google API
Робота з Google API
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ