2016-08-27 6 views
1

DocumentおよびDriveSampleアプリケーションから詳細情報を取得していないため、このAPIを使用してファイルコンテンツを更新する方法を正確にはわかりません。このように、私はそれが好き書き込もうとしました:GoogleDrive APIを使用する:GTLRDriveQuery_FilesUpdateを使用してファイルコンテンツを更新すると403エラーが発生する

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); 
        } 
       }]; 

エラーがある: は、ファイルの更新に失敗しました:エラードメイン= com.google.HTTPStatusコード= 403 "(ヌル)" のUserInfo = {データ= < 7b226572を726f7222 3a7b2265 72726f72 73223a5b ...

実際にデータはJSON形式ですが、「applicaton/json」でMIMETypeを試みましたが、まだ403エラーがあります。私はそのようなエラーでこのAPIについて何もGoogleにすることはできません。ファイルは自分のアプリケーションで作成され、アプリケーションのGoogleドライブからデータをダウンロードできます。しかし私は何が私の更新コードで間違っているのか分からない、誰も私を助けることができますか? ありがとう!ドライブのAPIで

答えて

0

Error 403はFFによって引き起こされる可能性があります

  • 403:値幅制限は
  • 403を超えています。ユーザーのレートリミットは
  • 403を超過:レートリミットは -403を超過:ユーザーが持っています{fileId}のファイルへのアクセス{appId} {verb}
  • 3:ユーザーにファイル{fileId}に対する十分な権限がありません -403:IDが{appId}のアプリケーションは認証済みで使用できませんユーザーのドメイン

Updating Filesに関するドキュメントに記載されているコードの実装を使用してください。

作成新しいファイル

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]; 
+0

ありがとうございます!私は私がそれを私の期待として使うことができるかどうかを調べるつもりです – eschao

+0

もし私がちょうどpdfファイルの名前をどのように名前を変更したいのですか?だから私はどのようにデータを取得するのですか? –

+0

[ファイルリソース](https://developers.google.com/drive/v3/reference/files#resource)のプロパティから '名前'になります。 – noogui

1

質問新しい休憩API(GTLR)、「エスカオ」は古い(古くなった)APIを指しています。

私はまったく同じ問題を抱えていましたが、新しいダミーのGTLR_File変数を作成し、それをクエリの最初のパラメータとして使用して修正しました。

+0

ソリューションをクリアにするだけです。以前のバージョンのGTLライブラリでは、既存のファイルを更新するために、既存のGTLDriveFileオブジェクトをクエリ作成メソッドの最初のパラメータに渡すことになっていましたが、新しいGTLRライブラリでは、新しい空のGTLRDrive_Fileオブジェクトを作成し、最初のパラメタとして。 @ eschaoのコードでは、 'cloudPreference'を' [GTLRDrive_File object] 'に置き換えるとうまくいくはずです。 – Taka

関連する問題