2012-12-03 59 views
3

我正尝试使用适用于iOS的Google Drive SDK创建文件夹。从谷歌驱动器文档浏览:使用Google Drive SDK创建文件夹iOS

https://developers.google.com/drive/folder

它说,创建一个文件夹,就像创建一个“文件”具有特殊的MIME类型。

GTLUploadParameters *uploadParameters = nil; 

self.driveFile = [GTLDriveFile object]; 
self.driveFile.title = foldername; 

uploadParameters = [GTLUploadParameters new]; 
uploadParameters.MIMEType = @"application/vnd.google-apps.folder"; 

GTLQueryDrive *query = nil; 
query = [GTLQueryDrive queryForFilesInsertWithObject:self.driveFile 
            uploadParameters:uploadParameters]; 


[self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket, 
                  GTLDriveFile *updatedFile, 
                  NSError *error) { 

但是,当我执行查询,我得到:

“NSInternalInconsistencyException”,理由是:“上传数据和文件句柄是相互排斥的”

这表明我应该使用预定义的一个GTLUploadParameters工厂方法:

+ (GTLUploadParameters *)uploadParametersWithData:(NSData *)data 
             MIMEType:(NSString *)mimeType; 

+ (GTLUploadParameters *)uploadParametersWithFileHandle:(NSFileHandle *)fileHandle 
               MIMEType:(NSString *)mimeType; 

但这些都不合适(或工作,因为我已经尝试过)。有没有人在iOS上使用Google云端硬盘成功创建文件夹?

回答

6

我这样做:

GTLDriveFile *folderObj = [GTLDriveFile object]; 
    folderObj.title = folderName; 
    folderObj.mimeType = @"application/vnd.google-apps.folder"; 

    // To create a folder in a specific parent folder, specify the identifier 
    // of the parent: 
    // _resourceId is the identifier from the parent folder 
    if (_resourceId.length && ![_resourceId isEqualToString:@"0"]) { 
     GTLDriveParentReference *parentRef = [GTLDriveParentReference object]; 
     parentRef.identifier = _resourceId; 
     folderObj.parents = [NSArray arrayWithObject:parentRef]; 
    } 

    GTLQueryDrive *query = [GTLQueryDrive queryForFilesInsertWithObject:folderObj uploadParameters:nil]; 

    // executeQuery:... 
+0

是这方面的工作 –

+0

@rmaddy,你可以分享你的completionBlock?是否传递了相同的参数,例如一个'GTLDriveFile *'? – tarabyte

+0

@tarabyte什么完成块? – rmaddy

0

这里还有一个更完整的变体:

+ (void)createFolderWithService:(GTLServiceDrive *)service 
        folderName:(NSString *)folderName 
         parentId:(NSString *)parentId 
       completionBlock:(void (^)(GTLServiceTicket *, GTLDriveFile *, NSError *))completionBlock { 
    GTLDriveFile *folderObj = [GTLDriveFile object]; 
    folderObj.title = folderName; 
    folderObj.mimeType = @"application/vnd.google-apps.folder"; 

    if (parentId.length && ![parentId isEqualToString:@"0"]) { 
    GTLDriveParentReference *parentRef = [GTLDriveParentReference object]; 
    parentRef.identifier = parentId; 
    folderObj.parents = [NSArray arrayWithObject:parentRef]; 
    } 

    GTLQueryDrive *query = [GTLQueryDrive queryForFilesInsertWithObject:folderObj uploadParameters:nil]; 
    [service executeQuery:query completionHandler:completionBlock]; 
} 
相关问题