Objective c 使用GoogleDrive API:GTLRDriveQuery_fileUpdate更新文件内容,出现403错误
我不知道如何确切地使用这个API来更新文件内容,因为我并没有从Document和DriveSample应用程序中获得详细信息。因此,我试着这样写:Objective c 使用GoogleDrive API:GTLRDriveQuery_fileUpdate更新文件内容,出现403错误,objective-c,macos,google-drive-api,Objective C,Macos,Google Drive Api,我不知道如何确切地使用这个API来更新文件内容,因为我并没有从Document和DriveSample应用程序中获得详细信息。因此,我试着这样写: GTLRUploadParameters *uploadParameters = [GTLRUploadParameters uploadParametersWithData:data MIMEType:@"binary/octet-str
GTLRUploadParameters *uploadParameters = [GTLRUploadParameters
uploadParametersWithData:data
MIMEType:@"binary/octet-stream"];
GTLRDriveQuery_FilesUpdate *query = [GTLRDriveQuery_FilesUpdate
queryWithObject:cloudPreference
fileId:cloudPreference.identifier
uploadParameters:uploadParameters];
[self.driveService executeQuery:query
completionHandler:^(GTLRServiceTicket *callbackTicket,
GTLRDrive_File *uploadedFile,
NSError *callbackError) {
if (callbackError == nil) {
NSLog(@"Updating file is finished!");
}
else {
NSLog(@"Failed to update file: %@", callbackError);
}
}];
错误是:
更新文件失败:驱动器API中的错误Domain=com.google.HTTPStatus Code=403“(null)”UserInfo={data=,可能是由ff引起的:
- 403:超出每日限额
- 403:超出用户速率限制
- 403:超出费率限制 -403:用户尚未授予应用程序{appId}{verb}对文件{fileId}的访问权限
- 403:用户没有足够的权限访问文件{fileId} -403:id为{appId}的应用无法在经过身份验证的用户的域中使用
GTLServiceDrive *driveService = ...;
NSString *name = @"hello.txt";
NSString *content = @"Hello world";
NSString *mimeType = @"text/plain";
GTLDriveFile *metadata = [GTLDriveFile object];
metadata.name = name;
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
GTLUploadParameters *uploadParameters = [GTLUploadParameters uploadParametersWithData:data MIMEType:mimeType];
GTLQueryDrive *query = [GTLQueryDrive queryForFilesInsertWithObject:metadata
uploadParameters:uploadParameters];
[driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
GTLDriveFile *updatedFile,
NSError *error) {
if (error == nil) {
NSLog(@"File %@", updatedFile);
} else {
NSLog(@"An error occurred: %@", error);
}
}];
要更新现有文件,请执行与创建新文件相同的过程,但请改用queryForFilesUpdatesWithObject方法:
GTLQueryDrive *query = [GTLQueryDrive queryForFilesUpdateWithObject:file
fileId:file.identifier
uploadParameters:uploadParameters];
问题是关于新的RESTAPI(GTLR),“eschao”是指旧的(过时的)api
我遇到了完全相同的问题,但我通过创建一个新的虚拟GTLR_文件变量并将其用作查询的第一个参数来修复了它。非常感谢!我将尝试看看是否可以使用它作为我的预期。如果我只想重命名pdf文件的名称,我该怎么做?那么如何获取数据?这将是属性中的“名称”。只是为了解决方案很清楚;在以前版本的GTL库中,我们应该传递现有的GTLDriveFile对象作为查询创建方法的第一个参数来更新现有文件,但在新的GTLR库中,我们必须创建一个新的空GTLRDrive_file对象,并将其作为第一个参数传递。在@eschao的代码中,替换
使用[GTLRDrive\u文件对象]
的cloudPreference应该可以工作。