[使用REST API从Google Drive下载图像

问题描述 投票:1回答:1

我正在尝试使用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个回答
3
投票
  • 您想使用Javascript的fetch通过API密钥从Google云端硬盘下载文件。
  • 该文件已公开共享。

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

修改点:

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

参考:

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

© www.soinside.com 2019 - 2024. All rights reserved.