【问题标题】:How do I get the parent folder using the Google Drive API?如何使用 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

谁能帮帮我?谢谢

【问题讨论】:

    标签: c# google-api google-drive-api google-api-dotnet-client


    【解决方案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 谢谢,这要简单得多。我希望他们的文档更好。我花了几个小时四处寻找这个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多