【问题标题】:How can I download a file by name from Google Drive API?如何从 Google Drive API 按名称下载文件?
【发布时间】:2019-12-11 20:48:18
【问题描述】:

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

【问题讨论】:

    标签: google-drive-api


    【解决方案1】:

    答案:

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

    推理:

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

    解决方法:

    您仍然可以使用文件名来构建请求,但首先您需要向 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]
    

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

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

    继续 - 您收到的回复如下:

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

    从这里,您可以开始构建您的 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 请求,随后可用于下载相关文件。

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多