我在ios应用中使用Google api v3。现在我想下载用FolderID确定的文件夹中的所有文件和文件夹。但谷歌API不支持下载文件夹(我没有看到它在这里下载:https://developers.google.com/drive/v3/web/folder)
我到处寻找决心,但不是结果。我尝试使用递归编写我的方法下载,但它不起作用
我认为谷歌驱动API支持它,但我找不到它。
如果您有解决方法或方法问题,您可以帮助我。
感谢阅读。
在文件夹中创建查询文件
<video preload="auto" controls></video>
<span></span>
使用递归下载所有项目。但是如何将文件夹名称从create传递给方法默认-(void)downloadItemWithFolderID:(NSString *)FolderID writeToPath:(NSString *)writeToPath{
GTLRDriveQuery_FilesList *query = [GTLRDriveQuery_FilesList query];
query.fields = @"nextPageToken, files(id, name, mimeType)";
query.pageSize = 10;
query.q = [NSString stringWithFormat:@"'%@' In parents and trashed=false",FolderID];
[self.service executeQuery:query
delegate:self
didFinishSelector:@selector(downloadFilePaten:finishedWithObject:error:)];
}
?
@selector(downloadFilePaten:finishedWithObject:error:)
写文件夹
- (void)downloadFilePaten:(GTLRServiceTicket *)ticket
finishedWithObject:(GTLRDrive_FileList *)result
error:(NSError *)error {
if (error == nil) {
if (result.files.count > 0) {
for (GTLRDrive_File *files in result.files) {
if(![files.mimeType isEqual: @"application/vnd.google-apps.folder"]){
GTLRQuery *query = [GTLRDriveQuery_FilesGet queryForMediaWithFileId:files.identifier];
[self.service executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
GTLRDataObject *file,
NSError *error) {
if (error == nil) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"documentsDirectory%@",documentsDirectory);
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,files.name];
[file.data writeToFile:filePath atomically:YES];
NSLog(@"Downloaded %lu bytes", file.data.length);
} else {
NSLog(@"An error occurred: %@", error);
}
}];
NSLog(@"run here");
}else{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
[self saveFolderToPath:documentsDirectory folderName:files.name];
[self downloadItemWithFolderID:files.identifier writeToPath:[NSString stringWithFormat:@"%@%@",documentsDirectory,files.name]];
}
}
} else {
NSLog(@"%@", @"No files found.");
}
} else {
NSLog(@"Error getting presentation data: %@\n", error.localizedDescription);
}
}
答案 0 :(得分:0)
Google云端硬盘的工作方式与桌面上的文件夹不同。文件夹实际上没有树形,而是每个文件(和文件夹)列出其父 s 。
此外,每个文件(或文件夹)都由其ID标识,如您所见,Google API中没有下载此文件夹ID 。这意味着您无法直接下载文件夹。
你可以提出一个swift(或python)脚本来做到这一点,但是你不能在一次API调用中直接做你想做的事。