Загрузите изображения с Google Drive с помощью API REST - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь загрузить изображения пользователей в браузер, используя API-интерфейс rest google drive, но не могу получить доступ к фактическим данным изображения. Я могу успешно вызвать конечную точку файлов, но я не знаю, что делать с ответом.

мой запрос на выборку:

fetch(`https://www.googleapis.com/drive/v3/files/${fileId}?key=${driveInfo.key}`, settings)
    .then(res => {
      return res.json();
    })
    .then(json => {
      console.log("drive json", json);
    });

, который выдает:

drive json
{
kind: "drive#file"
id: "1qXXBU6oIxs2Y4PZskA-kj6ljMjTfGKjf"
name: "Screenshot_20180919-160538.png"
mimeType: "image/png"
}

Я также заметил, что response.body - это ReadableStream<Uint8Array>, что здорово, так как мне в конечном счете нужен массив uint8, но похоже, что массив uint8 представляет вышеуказанные метаданные, а не фактические данные изображения.

Правильно ли я поступаю по этому поводу или мне не хватает этой попытки загрузить изображения в клиенте?

1 Ответ

3 голосов
/ 16 января 2020
  • Вы хотите загрузить файл с Google Диска с помощью ключа API, используя fetch из Javascript.
  • Этот файл открыт для общего доступа.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки модификации:

  • Чтобы загрузить файл в виде двоичных данных, добавьте alt=media к параметру запроса ,
    • Когда alt=media не используется, возвращаются метаданные файла.

Модифицированный скрипт:

fetch(`https://www.googleapis.com/drive/v3/files/${fileId}?key=${driveInfo.key}&alt=media`, settings)
  .then(res => {
    return res.arrayBuffer();
  })
  .then(data => {
     console.log(data);
  });

Примечание:

  • Если файл не является общедоступным, файл не может быть загружен с помощью ключа API. Пожалуйста, будьте осторожны с этим.
  • В приведенном выше сценарии данные извлекаются как arrayBuffer.
    • Если вы хотите получить данные в виде большого двоичного объекта, измените return res.arrayBuffer(); на return res.blob();

Ссылки:

Если я неправильно понял ваш вопрос, и это не был ваш результат хочу, извиняюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...