使用 REST api 从 Google 驱动器下载图像

Download images from Google Drive using the REST api

我正在尝试使用 google 驱动器剩余 api 在浏览器中下载用户图像,但我似乎无法获取实际图像数据。我能够成功调用文件端点,但我不知道如何处理响应。

我的获取请求:

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 数组代表上述元数据而不是实际图像数据。

我是否以正确的方式进行此操作,或者我在尝试在客户端中下载图像时偏离了方向?

  • 您想使用 Javascript 的 fetch 从 Google 驱动器使用 API 键下载文件。
  • 文件已公开共享。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

修改点:

  • 要以二进制数据形式下载文件,请在查询参数中添加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。
    • 如果要以blob的形式获取数据,请将return res.arrayBuffer();修改为return res.blob();

参考文献:

如果我误解了你的问题,这不是你想要的结果,我深表歉意。