找不到文件错误 Google 驱动器 API

File not found error Google Drive API

我正在使用 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 中使用它 request.The 文件确实存在,所以我不确定我在这里遗漏了什么。

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

确保范围是正确的

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 声明了以下范围。 Select 你想授予 APIs Explorer 哪些。

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

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

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

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

要使用的电子邮件地址:

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

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

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

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

如果您收到这样的回复:

<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 的示例代码中。

我遇到这个问题是因为我在使用 update 方法时遇到“找不到文件”错误。

我在 Python 中使用这一行来执行方法:

files_res.update(fileId=f_id, body={"name": f_name}).execute()

我可以列出 shared 文件及其父文件,但更新失败,无论此错误的范围如何:

...
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "File not found: 1YqV...",
    "locationType": "parameter",
    "location": "fileId"
   }
  ],
  "code": 404,
...

我在方法中添加了 supportsAllDrives=True 参数并且它起作用了:

files_res.update(fileId=f_id, body={"name": f_name}, supportsAllDrives=True).execute()