如何从 Google Drive API 按名称下载文件?

use*_*444 4 google-drive-api

我正在尝试从 Google Drive API v3 下载文件。我必须通过按名称查找文件来完成此操作。

这是获取文件一般信息的请求 url:

https://www.googleapis.com/drive/v3/files?q=name+%3D+'fileName.json'
Run Code Online (Sandbox Code Playgroud)

要下载文件,我必须使用参数 alt=media。它有效,但仅当我通过 id 找到该文件时才有效。我是说:

https://www.googleapis.com/drive/v3/files/3Gp-A4t6455kGGGIGX_gg63454354YD?alt=media
Run Code Online (Sandbox Code Playgroud)

有人知道如何使用这个按名称下载文件吗?

https://www.googleapis.com/drive/v3/files?q=name+%3D+'fileName.json'
Run Code Online (Sandbox Code Playgroud)

Raf*_*rmo 7

回答:

遗憾的是,无法使用 URL 本身中的文件名从 Google 云端硬盘下载文件。

推理:

如下图所示,Google Drive 支持多个同名文件。每个文件不是仅通过名称来标识,而是具有唯一的 ID,可以将其与其他文件区分开来。例如,由于可能存在三个具有相同名称的文件,因此发出请求并仅引用文件名并不能提供足够的信息来准确识别您要下载的文件。

在此输入图像描述

解决方法:

您仍然可以使用文件名来构建请求,但首先您需要向 Drive API 发出列表请求,以便您可以获得要下载的文件的特定文件 ID。

我假设您要下载的文件的名称fileName.json如您的问题所示。

首先,您需要向服务器发出列表请求以获取初始文件名。您需要的范围是:

https://www.googleapis.com/auth/drive.readonly
Run Code Online (Sandbox Code Playgroud)

请求本身正如您在问题中提出的那样。获得令牌后,您必须发出 GET 请求:

GET https://www.googleapis.com/drive/v3/files?q=name+%3D+'fileName.json'&key=[YOUR API KEY]
Run Code Online (Sandbox Code Playgroud)

您必须[YOUR API KEY]在此处替换为您的实际 API 密钥。您可以在OAuth Playground获取临时的一份。

通过此请求,您将获得云端硬盘中具有所请求文件名的所有文件的 JSON 响应。这是很重要的一点 - 如果您只有一个具有该文件名的文件,则无需担心,可以从这里继续。如果存在多个文件,则 JSON 响应将包含所有这些文件,因此需要在此处添加额外的代码来检索您想要的文件。

继续 - 您收到的响应采用以下形式:

https://www.googleapis.com/auth/drive.readonly
Run Code Online (Sandbox Code Playgroud)

从这里,您可以开始构建您的 URL。

构建下载 URL:

从 API 检索 JSON 响应后,您需要提取文件 ID 以放入 URL 中。以下示例是用 JavaScript/Google Apps 脚本编写的,但可以用适合您需求的任何语言构建:

GET https://www.googleapis.com/drive/v3/files?q=name+%3D+'fileName.json'&key=[YOUR API KEY]
Run Code Online (Sandbox Code Playgroud)

这将返回一个字符串,它是文件的下载 URL。这是一个Files: get可用于下载相关文件的请求。

参考: