使用 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】: 您希望使用 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();
参考资料:
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?
Firebase 不接受从 Google Identity Platform 的 REST API 获取的 JWT:“自定义令牌格式不正确。”