【问题标题】:File not found error Google Drive API找不到文件错误 Google Drive API
【发布时间】:2015-04-13 13:40:18
【问题描述】:

我正在使用 Drive REST API 下载文件。我正在使用文件 ID 发出 GET 请求,我得到一个 file not found exception

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "File not found: xxxxx",
    "locationType": "other",
    "location": "file"
   }
  ],
  "code": 404,
  "message": "File not found: xxxxx"
 }
} 

我还生成了 apikey,并在我的 GET 请求中使用它。该文件确实存在,所以我不确定我在这里缺少什么。

【问题讨论】:

  • 将 http 请求/响应粘贴到您的问题中,以便我们查看发生了什么。表面上该消息是不言自明的,所以我怀疑文件 ID 的值。
  • 404 是找不到资源。很可能是 url 不正确。如果您能够获取该文件,请尝试在浏览器中访问该文件。您也可以在 API 资源管理器中尝试:developers.google.com/drive/v2/reference/files/get#try-it

标签: google-drive-api


【解决方案1】:

已解决。在对文件元数据发出 GET 请求时,我没有提供正确的 access_token。我重新生成了授权码 access_token 并且我的代码现在可以工作了。

【讨论】:

  • 刷新令牌对我不起作用。我可以看到文件,但无法下载。
【解决方案2】:

确保范围正确

var url = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: ['https://www.googleapis.com/auth/drive.file',
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/drive.file',
    'https://www.googleapis.com/auth/drive.metadata'
  ]
});

Drive API 声明了以下范围。选择您要授予 API Explorer 的权限。

来源:https://developers.google.com/apis-explorer/#p/drive/v3/drive.files.get

【讨论】:

    【解决方案3】:

    我会检查您尝试为其检索元数据的文件是否是团队驱动器的一部分;如果是,那么您必须在请求中设置supportsTeamDrives=True

    【讨论】:

      【解决方案4】:

      就我而言,我只是没有授予我的服务帐户对文件夹的访问权限。只需通过网络界面分享即可解决问题。

      使用什么电子邮件地址:

      在此处检查您的服务帐户的电子邮件地址:

      https://console.cloud.google.com/iam-admin/serviceaccounts?project=NAME_OF_PROJECT&supportedpurview=project

      电子邮件地址将如下所示:

      name-of-service-account@name-of-project.iam.gserviceaccount.com 
      

      【讨论】:

        【解决方案5】:

        在我的例子中,我使用的是我一直使用的 gmail 地址创建的文件 client_secret.json,但我正在使用另一封电子邮件创建凭据。

        【讨论】:

          【解决方案6】:

          如果您收到这样的回复:

          <HttpError 404 when requesting https://www.googleapis.com/drive/v3/files/REDACTED_FILE_ID/copy?alt=json returned "File not found: REDACTED_FILE_ID.". Details: "[{'domain': 'global', 'reason': 'notFound', 'message': 'File not found: REDACTED_FILE_ID.', 'locationType': 'parameter', 'location': 'fileId'}]">
          

          并且 fileId 指向共享驱动器上的文件,您需要在请求参数中包含 supportsSharedDrives=true。

          Google 在其Implement shared drive support 文章中提供了更多详细信息。

          这是一个用 Python 创建副本的小例子:

          googledrive = build('drive', 'v3', credentials=creds)
          
          copy_response = googledrive.files().copy(
              fileId=TEMPLATE_SPREADSHEET_ID,
              body={
                  "parents": [
                      report_folder_id,
                  ],
                  'title': report_title
              },
              supportsAllDrives=True
          ).execute()
          

          为了运行它,您需要将它混合到来自Python Quickstart for Google Drive API 的示例代码中。

          【讨论】:

            猜你喜欢
            • 2021-10-15
            • 2021-03-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-10-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多