如何使用 Google Drive API 获取父文件夹?

Posted

技术标签:

【中文标题】如何使用 Google Drive API 获取父文件夹?【英文标题】:How do I get the parent folder using the Google Drive API? 【发布时间】:2021-12-24 05:09:15 【问题描述】:

我正在尝试编写一种方法来获取传入Id 的文件夹的父文件夹。我尝试了许多不同的变体,其中大部分来自此处接受的答案,但每个变体都会导致异常。

比如下面的代码……

public async Task<DriveFile> GetParentFolder(string folderId) 
  FilesResource.ListRequest request = _service.Files.List();
  request.Q = $"parents contains 'folderId'";
  request.Fields = "*";
  FileList files = await request.ExecuteAsync();
  return files.Files[0];

...抛出以下异常...

Error: The service drive has thrown an exception: Google.GoogleApiException: Google.Apis.Requests.RequestError
Invalid Value [400]
Errors [
    Message[Invalid Value] Location[q - parameter] Reason[invalid] Domain[global]
]

我尝试了很多 QFields 属性的值,但都导致相同的异常。

我有其他代码使用 API,所以问题不是基本服务,而且我使用 API 来获取一些文件夹的 Id,所以我知道我传入了一个有效值。

其中一个问题是 API 的 v2 有一个 Parents list,看起来它可以满足我的要求,但这似乎缺少 in v3。

谁能帮帮我?谢谢

【问题讨论】:

【参考方案1】:

你的做法是错误的,你不需要使用 file.list 你已经有了文件 ID,只需使用 file.get。

假设我在这里有文件夹 ID。


   "kind": "drive#file",
   "id": "1bzDkXlcND_yycIcbqwr1YYZ98-Yv7SG7",
   "name": "Current Badges (2019-21)",
   "mimeType": "application/vnd.google-apps.folder"
  ,

正如你在这个例子中看到的,我有 id,mime 类型是一个文件夹。

我需要做的就是做一个file.get

var request = _service.Files.Get("1bzDkXlcND_yycIcbqwr1YYZ98-Yv7SG7");
request.Fields = "parents";
var response = request.Execute();

响应将包含一个名为 parents 的文件,它是文件夹的父级。

如您所见,您是否已经知道文件 ID,或者在本例中是文件夹 ID。那么你真的只需要使用 file.get 来获取关于该 id 的所有信息。

确实没有理由使用 file.list。

【讨论】:

@DalmTo 谢谢,这要简单得多。我希望他们的文档更好。我花了几个小时四处寻找这个!

以上是关于如何使用 Google Drive API 获取父文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Google Drive API上按文件夹获取文件列表

Google Drive API获取具有该名称的文件ID

使用API 恢复Google Drive Spreadsheet的修订版

为什么Google文档在使用Google Drive API时显示的尺寸为零?

如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive

Python:从 Google Drive API 获取 zip 文件并加载其内容