IOS使用API​​下载谷歌驱动器上的文件夹中的所有文件

时间:2017-09-20 04:13:28

标签: ios google-api google-drive-api

我在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);
}
}

1 个答案:

答案 0 :(得分:0)

Google云端硬盘的工作方式与桌面上的文件夹不同。文件夹实际上没有树形,而是每个文件(和文件夹)列出其父 s

此外,每个文件(或文件夹)都由其ID标识,如您所见,Google API中没有下载此文件夹ID 。这意味着您无法直接下载文件夹。

你可以提出一个swift(或python)脚本来做到这一点,但是你不能在一次API调用中直接做你想做的事。