使用 REST api 从 Google Drive 下载图片

Posted

技术标签:

【中文标题】使用 REST api 从 Google Drive 下载图片【英文标题】:Download images from Google Drive using the REST api 【发布时间】:2020-05-02 19:46:37 【问题描述】:

我正在尝试使用 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);
    );

哪个输出:

drive json

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

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

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

【问题讨论】:

【参考方案1】: 您希望使用 javascriptfetch 使用 API 密钥从 Google Drive 下载文件。 该文件已公开共享。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

修改点:

若要将文件下载为二进制数据,请在查询参数中添加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();

参考资料:

Download a file stored on Google Drive Using Fetch

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

【讨论】:

alt=media 参数成功了,非常感谢!我还要注意,我正在测试的图像实际上是不公开的,但我在我的代码中传递了一个授权令牌作为获取设置对象的一部分。这似乎工作正常 @Jesse Sliter 感谢您的回复。很高兴您的问题得到解决。

以上是关于使用 REST api 从 Google Drive 下载图片的主要内容,如果未能解决你的问题,请参考以下文章

如何使用v3 rest api从google驱动器下载文件?

如何从Google Fitness REST API检索步数数据?

如何从 Firebase 函数调用第三方 Rest API 以用于 Google 上的操作

Google Ads API - 是不是存在 REST API?

无状态 REST 服务器上的 Google API 回调

Firebase 不接受从 Google Identity Platform 的 REST API 获取的 JWT:“自定义令牌格式不正确。”