列出Google云端硬盘的所有文件夹内容

嗨我已经使用谷歌驱动的博士编辑示例代码将谷歌潜水与我的应用程序集成。 但我无法查看存储在Google云端硬盘帐户中的所有文件。

//我试过这个

-(void)getFileListFromSpecifiedParentFolder { GTLQueryDrive *query2 = [GTLQueryDrive queryForChildrenListWithFolderId:@"root"]; query2.maxResults = 1000; [self.driveService executeQuery:query2 completionHandler:^(GTLServiceTicket *ticket, GTLDriveChildList *children, NSError *error) { NSLog(@"\nGoogle Drive: file count in the folder: %d", children.items.count); if (!children.items.count) { return ; } if (error == nil) { for (GTLDriveChildReference *child in children) { GTLQuery *query = [GTLQueryDrive queryForFilesGetWithFileId:child.identifier]; [self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLDriveFile *file, NSError *error) { NSLog(@"\nfile name = %@", file.originalFilename);}]; } } }]; } 

//我想在NSLog中显示所有内容…

1.如何从Google云端硬盘获取所有文件。

首先在viewDidLoad:方法检查身份validation

 -(void)viewDidLoad { [self checkForAuthorization]; } 

以下是所有方法的定义:

 // This method will check the user authentication // If he is not logged in then it will go in else condition and will present a login viewController -(void)checkForAuthorization { // Check for authorization. GTMOAuth2Authentication *auth = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName clientID:kClientId clientSecret:kClientSecret]; if ([auth canAuthorize]) { [self isAuthorizedWithAuthentication:auth]; } else { SEL finishedSelector = @selector(viewController:finishedWithAuth:error:); GTMOAuth2ViewControllerTouch *authViewController = [[GTMOAuth2ViewControllerTouch alloc] initWithScope:kGTLAuthScopeDrive clientID:kClientId clientSecret:kClientSecret keychainItemName:kKeychainItemName delegate:self finishedSelector:finishedSelector]; [self presentViewController:authViewController animated:YES completion:nil]; } } // This method will be call after logged in - (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController finishedWithAuth: (GTMOAuth2Authentication *)auth error:(NSError *)error { [self dismissViewControllerAnimated:YES completion:nil]; if (error == nil) { [self isAuthorizedWithAuthentication:auth]; } } // If everthing is fine then initialize driveServices with auth - (void)isAuthorizedWithAuthentication:(GTMOAuth2Authentication *)auth { [[self driveService] setAuthorizer:auth]; // and finally here you can load all files [self loadDriveFiles]; } - (GTLServiceDrive *)driveService { static GTLServiceDrive *service = nil; if (!service) { service = [[GTLServiceDrive alloc] init]; // Have the service object set tickets to fetch consecutive pages // of the feed so we do not need to manually fetch them. service.shouldFetchNextPages = YES; // Have the service object set tickets to retry temporary error conditions // automatically. service.retryEnabled = YES; } return service; } // Method for loading all files from Google Drive -(void)loadDriveFiles { GTLQueryDrive *query = [GTLQueryDrive queryForFilesList]; query.q = [NSString stringWithFormat:@"'%@' IN parents", @"root"]; // root is for root folder replace it with folder identifier in case to fetch any specific folder [self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLDriveFileList *files, NSError *error) { if (error == nil) { driveFiles = [[NSMutableArray alloc] init]; [driveFiles addObjectsFromArray:files.items]; // Now you have all files of root folder for (GTLDriveFile *file in driveFiles) NSLog(@"File is %@", file.title); } else { NSLog(@"An error occurred: %@", error); } }]; } 

注意:要获得完整的驱动器访问权限,您的范围应为kGTLAuthScopeDrive

 [[GTMOAuth2ViewControllerTouch alloc] initWithScope:kGTLAuthScopeDrive clientID:kClientId clientSecret:kClientSecret keychainItemName:kKeychainItemName delegate:self finishedSelector:finishedSelector]; 

2.如何下载特定文件。

因此,您必须使用GTMHTTPFetcher 。 首先获取该文件的下载URL。

 NSString *downloadedString = file.downloadUrl; // file is GTLDriveFile GTMHTTPFetcher *fetcher = [self.driveService.fetcherService fetcherWithURLString:downloadedString]; [fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) { if (error == nil) { if(data != nil){ // You have successfully downloaded the file write it with its name // NSString *name = file.title; } } else { NSLog(@"Error - %@", error.description) } }]; 

注意:如果您发现“downloadedString”为null或为空只看文件.JSON有“exportsLinks”数组,那么您可以使用其中一个获取该文件。

3.如何上传特定文件夹中的文件:这是上传图像的示例。

 -(void)uploadImage:(UIImage *)image { // We need data to upload it so convert it into data // If you are getting your file from any path then use "dataWithContentsOfFile:" method NSData *data = UIImagePNGRepresentation(image); // define the mimeType NSString *mimeType = @"image/png"; // This is just because of unique name you can give it whatever you want NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"dd-MMM-yyyy-hh-mm-ss"]; NSString *fileName = [df stringFromDate:[NSDate date]]; fileName = [fileName stringByAppendingPathExtension:@"png"]; // Initialize newFile like this GTLDriveFile *newFile = [[GTLDriveFile alloc] init]; newFile.mimeType = mimeType; newFile.originalFilename = fileName; newFile.title = fileName; // Query and UploadParameters GTLUploadParameters *uploadParameters = [GTLUploadParameters uploadParametersWithData:data MIMEType:mimeType]; GTLQueryDrive *query = [GTLQueryDrive queryForFilesInsertWithObject:newFile uploadParameters:uploadParameters]; // This is for uploading into specific folder, I set it "root" for root folder. // You can give any "folderIdentifier" to upload in that folder GTLDriveParentReference *parentReference = [GTLDriveParentReference object]; parentReference.identifier = @"root"; newFile.parents = @[parentReference]; // And at last this is the method to upload the file [[self driveService] executeQuery:query completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error) { if (error){ NSLog(@"Error: %@", error.description); } else{ NSLog(@"File has been uploaded successfully in root folder."); } }]; }