通过名称从Google Drive API下载文件

时间:2019-12-11 20:48:18

标签: google-drive-api

我正在尝试从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'

2 个答案:

答案 0 :(得分:0)

我相信您正在寻找与此类似的东西:

generate custom direct download link for google drive link

希望这会有所帮助!

答案 1 :(得分:0)

答案:

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

原因:

如下图所示,Google云端硬盘支持多个具有相同名称的文件。每个文件都具有唯一的ID,以区别于其他文件,而不是由其名称唯一标识。例如,可能有三个文件都具有相同的名称,发出一个请求并且仅引用该文件名并不能提供足够的信息来标识 确切要下载的文件< / em>

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脚本编写的,但可以使用适合您需要的任何语言来构建:

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;
}

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

希望对您有帮助!

参考文献: