实际上我将google drive sdk与我的ios应用程序集成在一起。我可以通过谷歌驱动器ios sdk检索/上传谷歌驱动器中的文件。但是从指定的父文件夹中检索文件列表需要花费很多时间。
这里是我正在使用的步骤和代码。
首先获取指定父文件夹的子项,然后获取每个孩子的 GTLDriveChildReference 然后查询子引用标识符。
这对我来说是一个巨大的过程。此外,它每次都要求谷歌服务器。有更好的方法可以在查询中传递父文件夹ID并从该父文件夹中提取文件。
-(void)getFileListFromSpecifiedParentFolder {
GTLQueryDrive *query2 = [GTLQueryDrive queryForChildrenListWithFolderId:<some_id or root>];
query2.maxResults = 1000;
// queryTicket can be used to track the status of the request.
[self.driveService executeQuery:query2
completionHandler:^(GTLServiceTicket *ticket,
GTLDriveChildList *children, NSError *error) {
NSLog(@"\nGoogle Drive: file count in the folder: %d", children.items.count);
//incase there is no files under this folder then we can avoid the fetching process
if (!children.items.count) {
return ;
}
if (error == nil) {
for (GTLDriveChildReference *child in children) {
GTLQuery *query = [GTLQueryDrive queryForFilesGetWithFileId:child.identifier];
// queryTicket can be used to track the status of the request.
[self.driveService executeQuery:query
completionHandler:^(GTLServiceTicket *ticket,
GTLDriveFile *file,
NSError *error) {
NSLog(@"\nfile name = %@", file.originalFilename);
}];
}
}
}];
}
可能会感激的任何帮助。
答案 0 :(得分:6)
我一直在使用以下代码(只需要一个查询而不是多个查询):
GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];
query.q = [NSString stringWithFormat:@"'%@' IN parents", <the folderID>];
[self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
GTLDriveFileList *files,
NSError *error) {
...
}];
到目前为止似乎运作良好。
答案 1 :(得分:2)
尝试在batch query中组合查询,例如
GTLBatchQuery *batchQuery = [GTLBatchQuery batchQuery];
for (GTLDriveChildReference *child in children) {
GTLQuery *query = [GTLQueryDrive queryForFilesGetWithFileId:child.identifier];
query.completionBlock = ^(GTLServiceTicket *ticket, GTLDriveFile *file, NSError *error) {
NSLog(@"error=%@, file name = %@", error, file.title);
};
[batchQuery addQuery:query];
}
[driveService executeQuery:batchQuery completionHandler:...]
如果启用了result pages的自动提取(service.shouldFetchNextPages = YES
),则尝试设置查询的maxResults属性,以避免库需要进行多次提取。例如,如果查询的结果为100或更少,则maxResults值为100将使用单次提取来检索它们。
对partial responses的请求也快一点,使用的内存要少得多,特别是对于大型结果。
请查看http logs,以便更好地了解查询的响应大小。