如何使用 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]
]
我尝试了很多 Q
和 Fields
属性的值,但都导致相同的异常。
我有其他代码使用 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上按文件夹获取文件列表
使用API 恢复Google Drive Spreadsheet的修订版
为什么Google文档在使用Google Drive API时显示的尺寸为零?