Google drive - 如何在同一文件夹内创建文件
Google drive - how to create a file inside the same folder
我创建了一个新文件夹 "Folder_Name" 并将生成的 csv 文件放入该文件夹中。当我单击上传 csv 按钮时,将调用此方法。它创建文件夹,然后在文件夹中创建文件。
然而,当我再次单击该按钮时,它会再次创建一个新文件夹并在其中创建新文件。当调用此方法时,我如何创建和使用一个独特的文件夹并将文件放入文件夹中。
代码:
- (void)uploadGeneratedCSVFile
{
[ self generateCSV ];
NSString* filePath = [ [self applicationDocumentsDirectory ] stringByAppendingPathComponent:fileName ];
NSString* mimeType = @"text/csv";
GTLDriveFile* folder = [ GTLDriveFile object ];
[ folder setTitle:@"Folder_Name" ];
[ folder setMimeType:@"application/vnd.google-apps.folder" ];
GTLUploadParameters* folderUploadParameters = [ GTLUploadParameters new ];
GTLQueryDrive* queryFolder = [ GTLQueryDrive queryForFilesInsertWithObject:folder uploadParameters:nil ];
[ self.driveService executeQuery:queryFolder completionHandler:^( GTLServiceTicket *ticket,
GTLDriveFile *updatedFile,
NSError *error) {
if (error == nil)
{
NSLog( @"Created Folder" );
GTLDriveParentReference* parent = [ GTLDriveParentReference object ];
[ parent setIdentifier:updatedFile.identifier ];
// Metadata
GTLDriveFile* file = [ GTLDriveFile object ];
[ file setTitle:[ NSString stringWithFormat:@"%@_%@",fileName, currDateStr ] ];
[ file setParents:[ NSArray arrayWithObjects:parent, nil ] ];
GTLUploadParameters* uploadParameters = [ GTLUploadParameters uploadParametersWithData:csv MIMEType:mimeType];
GTLQueryDrive* query = [ GTLQueryDrive queryForFilesInsertWithObject:file uploadParameters:uploadParameters ];
[ self.driveService executeQuery:query completionHandler:^( GTLServiceTicket *ticket,
GTLDriveFile *updatedFile,
NSError *error)
{
if (error == nil)
{
NSLog(@"File %@", updatedFile.originalFilename);
}
else
{
NSLog(@"An error occurred: %@", error);
}
[ self viewDidAppear:YES ];
}];
}
else
{
NSLog( @"An error occurred: %@",error );
}
}];
}
您需要了解 Google 驱动器文件(和文件夹 - 无论如何都只是文件)由唯一 ID 标识,而不是它们的名称。因此,如果您告诉 Drive 创建与前一个文件夹同名的第二个文件夹,Drive 会假定您知道自己在做什么并服从。您需要做的是第一次捕获文件夹的 ID,然后使用该 ID 作为后续插入的父级。
我创建了一个新文件夹 "Folder_Name" 并将生成的 csv 文件放入该文件夹中。当我单击上传 csv 按钮时,将调用此方法。它创建文件夹,然后在文件夹中创建文件。
然而,当我再次单击该按钮时,它会再次创建一个新文件夹并在其中创建新文件。当调用此方法时,我如何创建和使用一个独特的文件夹并将文件放入文件夹中。
代码:
- (void)uploadGeneratedCSVFile
{
[ self generateCSV ];
NSString* filePath = [ [self applicationDocumentsDirectory ] stringByAppendingPathComponent:fileName ];
NSString* mimeType = @"text/csv";
GTLDriveFile* folder = [ GTLDriveFile object ];
[ folder setTitle:@"Folder_Name" ];
[ folder setMimeType:@"application/vnd.google-apps.folder" ];
GTLUploadParameters* folderUploadParameters = [ GTLUploadParameters new ];
GTLQueryDrive* queryFolder = [ GTLQueryDrive queryForFilesInsertWithObject:folder uploadParameters:nil ];
[ self.driveService executeQuery:queryFolder completionHandler:^( GTLServiceTicket *ticket,
GTLDriveFile *updatedFile,
NSError *error) {
if (error == nil)
{
NSLog( @"Created Folder" );
GTLDriveParentReference* parent = [ GTLDriveParentReference object ];
[ parent setIdentifier:updatedFile.identifier ];
// Metadata
GTLDriveFile* file = [ GTLDriveFile object ];
[ file setTitle:[ NSString stringWithFormat:@"%@_%@",fileName, currDateStr ] ];
[ file setParents:[ NSArray arrayWithObjects:parent, nil ] ];
GTLUploadParameters* uploadParameters = [ GTLUploadParameters uploadParametersWithData:csv MIMEType:mimeType];
GTLQueryDrive* query = [ GTLQueryDrive queryForFilesInsertWithObject:file uploadParameters:uploadParameters ];
[ self.driveService executeQuery:query completionHandler:^( GTLServiceTicket *ticket,
GTLDriveFile *updatedFile,
NSError *error)
{
if (error == nil)
{
NSLog(@"File %@", updatedFile.originalFilename);
}
else
{
NSLog(@"An error occurred: %@", error);
}
[ self viewDidAppear:YES ];
}];
}
else
{
NSLog( @"An error occurred: %@",error );
}
}];
}
您需要了解 Google 驱动器文件(和文件夹 - 无论如何都只是文件)由唯一 ID 标识,而不是它们的名称。因此,如果您告诉 Drive 创建与前一个文件夹同名的第二个文件夹,Drive 会假定您知道自己在做什么并服从。您需要做的是第一次捕获文件夹的 ID,然后使用该 ID 作为后续插入的父级。