如何通过Google Drive API按文件名下载文件?

4

我将尝试从Google Drive API v3下载文件。我需要通过名称查找文件来完成此操作。

以下是获取文件一般信息的请求URL:

https://www.googleapis.com/drive/v3/files?q=name+%3D+'fileName.json'

要下载文件,我必须使用参数alt=media。这种方法只适用于通过ID查找文件的情况。也就是说:

https://www.googleapis.com/drive/v3/files/3Gp-A4t6455kGGGIGX_gg63454354YD?alt=media

有人知道如何通过文件名下载文件吗?可以使用以下方法:
https://www.googleapis.com/drive/v3/files?q=name+%3D+'fileName.json'
1个回答

6

答案:

很遗憾,使用URL中的文件名无法从Google Drive下载文件。

原因:

如下图所示,Google Drive支持多个具有相同名称的文件。每个文件都有一个唯一的ID来区分其他文件,而非仅通过文件名进行标识。例如,可能会有三个完全相同名称的文件,如果您只参考文件名进行请求,则不足以提供足够的信息来确定 确切要下载的文件

enter image description here

解决方法:

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

假设您要下载的文件名为fileName.json,则需要首先向服务器发出列表请求以获取初始文件名。此操作所需的范围是:

https://www.googleapis.com/auth/drive.readonly

请求本身就像您在问题中提出的那样。一旦您获得了令牌,您必须发出GET请求:

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

您必须使用实际的API密钥替换[YOUR API KEY]。您可以在OAuth Playground上获得临时密钥。

从此请求中,您将获得一个JSON响应,其中包含请求文件名的所有驱动器中的文件。这是一个重要的问题 - 如果只有一个文件具有此文件名,则无需担心,可以继续进行。如果存在多个文件,则JSON响应将包含所有这些文件,因此需要添加额外的代码来检索所需的文件。

接下来 - 您收到的响应形式如下:

{
  "incompleteSearch": false, 
  "files": [
    {
      "mimeType": "application/json", 
      "kind": "drive#file", 
      "id": "<your-file-ID>", 
      "name": "fileName.json"
    }
  ], 
  "kind": "drive#fileList"
}

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

构建下载URL:

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

function buildTheUrl() {
  var url = "https://www.googleapis.com/drive/v3/files";
  var fileName = "fileName.json"
  var apiKey = "your-api-key";
  var parameters = "?q=name+%3D+'";

  var requestUrl = url + parameters + fileName + "&key=" + apiKey;
  var response = JSON.parse(UrlFetchApp.fetch(requestUrl).getContentText());

  var fileId = response.files.id;
  var downloadUrl = "https://www.googleapis.com/drive/v3/files/";
  var urlParams = "?alt=media";

  return downloadUrl + fileId + urlParams + "&key=" + apiKey;
}

此代码会返回一个字符串,其中包含文件的下载链接。这是一个Files: get请求,您可以使用它来下载所需的文件。

参考资料:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接