繁体   English   中英

使用Google云端硬盘API按文件夹ID检索子项

[英]Retrieve Child Items by Folder Id Using 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种方式,因为添加其他条件比较容易(例如,rashed = false以仅获取未垃圾的文件),因此您可以使用单个函数进行搜索并列出全部。

我经常使用Google Drive API,发现性能的主要问题是由于单个文件附加了大量信息(最后一次,而在大多数情况下,我们只需要其中几个信息即可)应用程序;幸运的是,您可以在搜索中使用items参数获得部分响应(有关更多信息,请参见Performance Tips文档 )。

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

如果确实需要获取所有文件元数据,我建议您首先像示例2中那样获取项目列表,但只获取fileId ,而不是使用Parallel.ForEach(.Net 4.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM