使用 REST api 从 Google Drive 下载图像

Jes*_*ter 1 javascript rest google-drive-api fetch-api

我正在尝试使用 google Drive Rest 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);
    });
Run Code Online (Sandbox Code Playgroud)

其输出:

drive json
{
kind: "drive#file"
id: "1qXXBU6oIxs2Y4PZskA-kj6ljMjTfGKjf"
name: "Screenshot_20180919-160538.png"
mimeType: "image/png"
}
Run Code Online (Sandbox Code Playgroud)

我还注意到这response.body很棒ReadableStream<Uint8Array>,因为我最终需要一个 uint8 数组,但看起来 uint8 数组代表上述元数据而不是实际的图像数据。

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

Tan*_*ike 5

  • 您想要使用 Javascript 使用 API 密钥从 Google Drive 下载文件fetch
  • 该文件是公开共享的。

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

修改要点:

  • 为了将文件下载为二进制数据,请添加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);
  });
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 当文件未公开共享时,无法通过 API 密钥下载该文件。请小心这一点。
  • 在上面的脚本中,数据作为 arrayBuffer 检索。
    • 如果您想以 blob 形式检索数据,请修改return res.arrayBuffer();return res.blob();

参考:

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