С помощью Node.js и Multer и без OAuth2!

Для использования сервисов Google требуется аутентификация OAuth2, которая немного сложна для реализации и может не стоить проблем, если вы пытаетесь реализовать только простую функциональность.

Сегодня мы узнаем, как мы можем загружать файлы на гугл диск, используя сервисный аккаунт. Это позволит нам избежать реализации аутентификации OAuth2.

Формат видео:

Если вы предпочитаете формат видео, вот он:

Если нет, продолжим.

Предпосылки

  1. Первым делом нужно создать учетную запись службы и получить файл key.json. из вашей облачной консоли Google
  2. Затем вам нужно будет включить API Google Диска на вашей консоли.
  3. В загруженном файле key.json вы увидите поле client_email. Скопируйте это значение.
  4. Перейдите на диск Google, к которому вы хотите получить доступ через API, и поделитесь этой папкой/файлами с этой учетной записью электронной почты.

Последний шаг важен, потому что он позволит нам избежать реализации аутентификации OAuth2.

Подготовьте переднюю часть

Создайте новое приложение React.

Интерфейсный код очень прост. Нам просто понадобится средство выбора файлов, чтобы выбрать файл с нашего локального компьютера и отправить его на наш сервер Node.js.

Это простой компонент, который позволит нам выбрать файл из локального хранилища и вызвать API, который мы собираемся разработать дальше.

Подготовьте серверную часть

Давайте сначала инициализируем проект, установив некоторые зависимости.

yarn add googleapis express cors multer

здесь multer — это специальное промежуточное ПО для express приложений, которое помогает с загрузкой файлов

googleapis — это наш способ взаимодействия с Google Cloud API.

Давайте сначала рассмотрим, что мы собираемся делать.

Настроить мультер

  1. Мы настроим наше дисковое хранилище, используя multer. Это позволит нам сохранить входящий файл в указанной папке.

Аутентифицировать наше приложение

Затем мы создадим и авторизуем код нашего приложения с помощью файла key.json.

Затем создайте нашу функцию для обработки функции загрузки файлов.

Обратите внимание, что в поле fileMetadata есть массив parents. Это идентификатор папки Google Диска, в которую мы хотим загрузить файл.

И после того, как мы загрузим файл на диск Google, мы также хотим удалить файл. Давайте создадим для этого другую функцию.

const deleteFile = (filePath) => {
  fs.unlink(filePath, () => {
    console.log("file deleted");
  });
};

И, наконец, давайте получим нашу конечную точку и используем все это вместе.

Получить список файлов

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

const response = await drive.files.list(params);

И из ответа мы получим список, где можно найти идентификатор файла.

Загрузка файла без его сохранения

Приведенное выше решение работает отлично. До получения требования о том, что нельзя хранить файл на диске.

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

Чтобы обойти эту проблему, у нас есть еще один вариант, который предоставляет нам Multer. Мы можем просто использовать multer’s memorystorage.

он будет хранить файлы в памяти приложения. Не должно быть проблем, если размеры файлов не супер сумасшедшие. Просто настройте это здесь.

И вы готовы идти!

Это все на сегодня. Надеюсь, вы узнали что-то новое.

Хорошего дня!

Свяжитесь со мной через LinkedIn или мой Персональный сайт.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.