【问题标题】:Insufficient Permission code 403 on Upload上传时权限代码 403 不足
【发布时间】:2018-01-24 02:26:35
【问题描述】:

使用适用于 iOS 的 Quickstart 应用程序,我能够让 Google Drive 浏览文件和文件夹、显示图标和缩略图以及下载文件。但是,在上传时出现以下错误:

发生错误:Error Domain=com.google.GTLRErrorObjectDomain Code=403 "Insufficient Permission" UserInfo={GTLRStructuredError=GTLRErrorObject 0x61800024ff90: {message:"Insufficient Permission" 错误:[1] code:403}, NSLocalizedDescription=权限不足}

从这里的 cmets 和 Google 论坛上看,我似乎需要使用 Drive 范围,但我不知道该怎么做。这是登录时的回调:

- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error {
    if (error != nil) {
        [self showAlert:@"Authentication Error" message:error.localizedDescription];
        _driveService.authorizer = nil;
    } else {
        self.signInButton.hidden = true;
        _driveService.authorizer = user.authentication.fetcherAuthorizer;
        [self signedIn];
        [self listFilesFromFolderID:[self initialFolder]];
    }
}

然后,上传文件我这样做:

_driveFile = [GTLRDrive_File object];
_driveFile.name = [NSString stringWithFormat:@"%@.%@", _filenameToSave, _fileExtension];
_driveFile.mimeType = _fileMimeType;

NSString *parentRef = @"root";

if ( self.currentFolder )
    parentRef = [self.currentFolder.identifier copy];

_driveFile.parents = @[ parentRef ];

GTLRUploadParameters *uploadParameters = [GTLRUploadParameters uploadParametersWithData:fileData
                                                                               MIMEType:_driveFile.mimeType];
uploadParameters.shouldUploadWithSingleRequest = TRUE;
GTLRDriveQuery_FilesCreate *query = [GTLRDriveQuery_FilesCreate queryWithObject:_driveFile
                                                               uploadParameters:uploadParameters];
query.fields = @"id";
[self.driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
                                                     GTLRDrive_File *file,
                                                     NSError *error) {
    if (error == nil) {
        NSLog(@"File ID %@", file.identifier);
    } else {
        NSLog(@"An error occurred: %@", error);
    }
}];

【问题讨论】:

    标签: objective-c google-drive-api


    【解决方案1】:

    问题是在登录 Google 时获得了许可。请检查您在登录时提供的范围

    GIDSignIn* signIn = [GIDSignIn sharedInstance];
    signIn.delegate = self;
    signIn.uiDelegate = self;
    signIn.scopes = [NSArray arrayWithObjects:kGTLRAuthScopeDrive, nil];
    

    变化:

    kGTLRAuthScopeDriveReadonly --> kGTLRAuthScopeDrive
    

    我把它叫做 kGTLRAuthScopeDriveReadonly 并得到同样的错误。只需检查相同的代码即可。

    【讨论】:

    • 非常感谢!它就在我的鼻子底下。我在谷歌文档中花了几个小时试图弄清楚这一点。呵呵。
    • @user1673447 我最近做了它,并且花了更多的时间在它后面。我的回答对你有帮助吗?
    猜你喜欢
    • 2016-06-23
    • 2015-04-21
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2017-02-20
    • 2018-05-20
    • 2019-04-18
    相关资源
    最近更新 更多