【问题标题】:Download images from Google Drive using the REST api使用 REST api 从 Google Drive 下载图片
【发布时间】: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 数组代表的是上述元数据,而不是实际的图像数据。

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

【问题讨论】:

    标签: javascript rest google-drive-api fetch-api


    【解决方案1】:
    • 您希望使用 JavaScript 的 fetch 使用 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();

    参考资料:

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

    【讨论】:

    • alt=media 参数成功了,非常感谢!我还要注意,我正在测试的图像实际上是不公开的,但我在我的代码中传递了一个授权令牌作为获取设置对象的一部分。这似乎工作正常
    • @Jesse Sliter 感谢您的回复。很高兴您的问题得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多