2013-08-01 120 views
0

嗨我已经将谷歌潜水与使用博士编辑示例代码从谷歌驱动器中的应用程序进行了整合。但我无法查看存储在我的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的所有内容......

回答

11

1.如何从谷歌云端硬盘中的所有文件。

首先在viewDidLoad:认证

-(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或空只是看看file.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."); 
     } 
    }]; 
} 
+0

k bro。我会检查并让你知道... – NextStep

+0

没有帮助你吗? – TheTiger

+0

不,我没有得到名单.. – NextStep

相关问题