2017-03-31 31 views
0

サイズが5 MB(多分?)を超えるGoogleドライブファイルの問題が発生しています。私はそれらをダウンロードし、application/pdfとしてそれらをエクスポートしようとしているが、エラー500エラー500 - ダウンロードを取得drive.files.export

に走る私が取得し、ドライブのファイル(DOC、PPT、またはXLS)をダウンロードするには、次のコードを使用していています:

- (void)downloadFile:(NSString *)fileID 
     completionBlock:(void (^)(NSString *))onCompletionBlock 
       failBlock:(void (^)(NSError *))onDownloadFailBlock { 

    GTLRQuery *query = [GTLRDriveQuery_FilesExport queryForMediaWithFileId:fileID mimeType:@"application/pdf"]; 
    GTLRDriveService *service = self.driveService; 

    [service executeQuery:query 
      completionHandler:^(GTLRServiceTicket *callbackTicket, 
          GTLRDataObject *dataObject, 
          NSError *callbackError) { 
      if (callbackError == nil) { 
       // The file downloaded successfully; its data is available as dataObject.data 
       // File has been downloaded 
      } else { 
       if (onDownloadFailBlock) { 
        onDownloadFailBlock(callbackError); 
       } 
       return; 
      } 
    }]; 
} 

以下は、私がGTMSessionFetcherを使用して取得したログです:

Download drive.files.export 

2017-03-30 22:37:50 +0000 elapsed: 29.406sec 
Request: GET https://www.googleapis.com/drive/v3/files/[fileID]/export?alt=media&mimeType=application%2Fpdf 
Request headers: 
    Accept: application/json 
    Authorization: Bearer _snip_ 
    Cache-Control: no-cache 
    Content-Type: application/json; charset=utf-8 
    User-Agent: org.cocoapods.GoogleAPIClientForREST/1.2.1 google-api-objc-client/3.0 iPhone/10.2 hw/sim (gzip) 

Response: status 500 
Response headers: 
    Cache-Control: private, max-age=0 
    Content-Encoding: gzip 
    Content-Length: 123 
    Content-Type: application/json; charset=UTF-8 
    Date: Thu, 30 Mar 2017 22:37:50 GMT 
    Expires: Thu, 30 Mar 2017 22:37:50 GMT 
    Server: GSE 
    Vary: Origin, X-Origin 
    alt-svc: quic=":443"; ma=2592000; v="37,36,35" 
    x-content-type-options: nosniff 
    x-frame-options: SAMEORIGIN 
    x-xss-protection: 1; mode=block 

Response body: (180 bytes) 
{ 
    "error" : { 
    "message" : "Internal Error", 
    "errors" : [ 
     { 
     "reason" : "internalError", 
     "message" : "Internal Error", 
     "domain" : "global" 
     } 
    ], 
    "code" : 500 
    } 
} 

何が価値があるため、戻って、このエラーがスローされます際に30秒のサーバーの制限があるように思える - 未満のファイルの場合500 5 MBのサイズで、正しくやっていて、私はablですeをクリックしてpdfファイルを取得します。これは通常30秒以内に実行され、認証の問題ではないことを意味します。

また、mimeTypeをvnd.openxmlformats-officedocument.wordprocessingml.documentに変更しようとしましたが、"message": "This file is too large to be exported."という403エラーが発生します。

この問題を回避するにはどうすればよいですか?

ありがとうございます。

+0

「www.googleapis.com」が見つかりません。それはほんの一例ですか、それとも本当に使ったのですか? –

+0

あなたが許可されていなければ、アクセスできなくなるので、ファイルIDを削除しました。 fileIDは1IrCPpb8H6GtfsvtbtqK7q4x8IxX0_C2uQC1xaoVYaH4 –

+0

です。drive.google.comのウェブアプリを使用してこのファイルをpdfにエクスポートできますか? – pinoyyid

答えて

0

500エラーは、しばしば内部ドライブのインフラストラクチャ内のタイムアウトの結果です。それはあなたが見ている症状と両立するでしょう。したがって、大規模なファイルは、インフラストラクチャがタイムアウトしたことを.pdfにレンダリングするのに時間がかかります。

標準的なアドバイスは、指数バックオフアルゴリズムを使用して500のエラーをバックオフして再試行することです。あなたのケースでは、5秒でバックオフを開始することをお勧めします。一度バックオフして合計30秒間再試行した場合でも、それでも失敗すれば、あきらめてください。

+0

私は指数関数的に戻ることができますが、私はそれが問題を解決するとは思わない(ほとんど失敗する可能性が高い)。ウェブ版はそれを行うことができます。また、実際には100 MBのファイルについては話していませんが、テストケースは5.2 MBで失敗します。 –

+0

私はあなたが正しいと思っていますが、バックオフと再試行は文字通りあなたの箱の唯一のツールです。考えてみると、失敗した試行のpdf出力が、ドライブインフラストラクチャのどこかにキャッシュされ、その後のエクスポートがはるかに高速になることがわかります。それがあなたを刑務所から引き離さなければ、あなたはドライブのバグに悩まされています。 – pinoyyid

関連する問題