正确使用 Google Drive API v3 来检索文件的文件夹父 ID?

Correct usage of Google Drive API v3 to retrieve the folder parent(s) Id of a file?

场景


我正在尝试使用 Google Drive API v3 开发一个简单的程序,它必须能够列出存储在用户的 "drive",然后解释目录层次结构(这意味着:确定文件存储在哪个文件夹 name/id 中)。

问题


我遇到的问题是基本上 File.Parents 属性(理论上包含存储文件的文件夹的 ID)总是空的(nul) 在收到响应后,即使我确保在请求中指定 parents 值:

用 C# 编写的代码:

using Google.Apis.Drive.v3;

private DriveService client;
// ...

FilesResource.ListRequest request = this.client.Files.List();

request.PageSize = 100;
request.SupportsTeamDrives = false;
request.Fields = "nextPageToken, files(id, name, description, size,
                                       trashed, shared, ownedByMe, isAppAuthorized,
                                       createdTime, modifiedTime, 
                                       parents)";

FileList response = await request.ExecuteAsync();

原代码写在VB.NET:

Imports Google.Apis.Drive.v3

Private client As DriveService
' ...

Dim request As FilesResource.ListRequest = Me.client.Files.List()
With request
    .PageSize = 100
    .SupportsTeamDrives = False
    .Fields = "nextPageToken, files(id, name, description, size,
                                    trashed, shared, ownedByMe, isAppAuthorized,
                                    createdTime, modifiedTime, 
                                    parents)"
End With

Dim response As FileList = Await request.ExecuteAsync()

此外,其他属性如 File.CreatedTimeFile.ModifiedTime 也是 nul,我不明白为什么。 File.IdFile.Name 等其他属性按预期工作...很好。

问题


为什么 File.Parents 属性 为空,我该如何解决?。我想念做什么?

研究


Files: list

File metadata:

{
  "kind": "drive#file",
  "id": string,
  "name": string,
  "mimeType": string,
  "description": string,
  "starred": boolean,
  "trashed": boolean,
  "explicitlyTrashed": boolean,
  "trashingUser": {
    "kind": "drive#user",
    "displayName": string,
    "photoLink": string,
    "me": boolean,
    "permissionId": string,
    "emailAddress": string
  },
  "trashedTime": datetime,
  "parents": [
    string
  ],
  "properties": {
    (key): string
  },
  "appProperties": {
    (key): string
  },
  "spaces": [
    string
  ],
  "version": long,
  "webContentLink": string,
  "webViewLink": string,
  "iconLink": string,
  "hasThumbnail": boolean,
  "thumbnailLink": string,
  "thumbnailVersion": long,
  "viewedByMe": boolean,
  "viewedByMeTime": datetime,
  "createdTime": datetime,
  "modifiedTime": datetime,
  "modifiedByMeTime": datetime,
  "modifiedByMe": boolean,
  "sharedWithMeTime": datetime,
  "sharingUser": {
    "kind": "drive#user",
    "displayName": string,
    "photoLink": string,
    "me": boolean,
    "permissionId": string,
    "emailAddress": string
  },
  "owners": [
    {
      "kind": "drive#user",
      "displayName": string,
      "photoLink": string,
      "me": boolean,
      "permissionId": string,
      "emailAddress": string
    }
  ],
  "teamDriveId": string,
  "lastModifyingUser": {
    "kind": "drive#user",
    "displayName": string,
    "photoLink": string,
    "me": boolean,
    "permissionId": string,
    "emailAddress": string
  },
  "shared": boolean,
  "ownedByMe": boolean,
  "capabilities": {
    "canAddChildren": boolean,
    "canChangeViewersCanCopyContent": boolean,
    "canComment": boolean,
    "canCopy": boolean,
    "canDelete": boolean,
    "canDownload": boolean,
    "canEdit": boolean,
    "canListChildren": boolean,
    "canMoveItemIntoTeamDrive": boolean,
    "canMoveTeamDriveItem": boolean,
    "canReadRevisions": boolean,
    "canReadTeamDrive": boolean,
    "canRemoveChildren": boolean,
    "canRename": boolean,
    "canShare": boolean,
    "canTrash": boolean,
    "canUntrash": boolean
  },
  "viewersCanCopyContent": boolean,
  "writersCanShare": boolean,
  "permissions": [
    permissions Resource
  ],
  "hasAugmentedPermissions": boolean,
  "folderColorRgb": string,
  "originalFilename": string,
  "fullFileExtension": string,
  "fileExtension": string,
  "md5Checksum": string,
  "size": long,
  "quotaBytesUsed": long,
  "headRevisionId": string,
  "contentHints": {
    "thumbnail": {
      "image": bytes,
      "mimeType": string
    },
    "indexableText": string
  },
  "imageMediaMetadata": {
    "width": integer,
    "height": integer,
    "rotation": integer,
    "location": {
      "latitude": double,
      "longitude": double,
      "altitude": double
    },
    "time": string,
    "cameraMake": string,
    "cameraModel": string,
    "exposureTime": float,
    "aperture": float,
    "flashUsed": boolean,
    "focalLength": float,
    "isoSpeed": integer,
    "meteringMode": string,
    "sensor": string,
    "exposureMode": string,
    "colorSpace": string,
    "whiteBalance": string,
    "exposureBias": float,
    "maxApertureValue": float,
    "subjectDistance": integer,
    "lens": string
  },
  "videoMediaMetadata": {
    "width": integer,
    "height": integer,
    "durationMillis": long
  },
  "isAppAuthorized": boolean
}

尝试设置 fields=* 并从那里向后工作。 https://developers.google.com/drive/v3/web/performance#partial 中提到了通配符,尽管该页面看起来通常已过时。