如何使用 Google 驱动器 API 获取父文件夹?

How do I get the parent folder using the Google Drive API?

我正在尝试编写一种方法来获取传入 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, which looks like it does what I want, but this seems to be missing in v3

有人能帮帮我吗?谢谢

你的做法是错误的,你不需要使用 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。