使用Google Drive API按文件夹ID检索子项目

时间:2014-09-27 20:07:34

标签: .net google-drive-api

是否有通过父文件夹ID加载项目的有效方法?直到现在我才发现这些方式:

var children = _driveService.Children.List(folderId).Execute().Items;

var result = children.Select(i =>
{
     var item = _driveService.Files.Get(i.Id).Execute();

     return item;
});

var items = _driveService.Files.List();

items.Q = string.Format("'{0}' in parents", folderId);

var result = items.Execute().Items;

但我不喜欢他们,因为他们很慢而且看起来也很愚蠢。还没有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我最喜欢2种方式,因为添加其他条件更简单(例如trashed = false以仅获取未被删除的文件),因此您可以获得单个搜索功能并列出所有。

使用Google Drive API很多,我发现性能的主要问题是由于附加到单个文件的大量信息(上次,而大部分时间我们只需要一个我们的应用程序中有几个;幸运的是,您可以使用搜索中的items参数获得部分回复(Performance Tips documentation中提供了更多信息)。

根据经验,在我去年进行的一些测试之后,只获得标题,最后更新日期和ID传输每个结果的数据减少了近90%,相当于数据传输的改进。

如果您确实需要获取所有文件元数据,我建议您首先获取示例2中的项目列表,但仅使用fileId,而不是使用Parallel.ForEach( .Net 4.0+)以并行请求获取所有文件元数据。

答案 1 :(得分:0)

通过这种方式我能够提高性能:

var items = _driveService.Files.List();

items.Q = string.Format("'{0}' in parents and trashed = false", folderId);
items.Fields = "items(id,title,fileSize,mimeType)";

var result = items.Execute().Items;

感谢@smokybob