2016-10-09 32 views
1

これまでにsimilar questionsに質問しました。しかし、いずれも答えられていませんでした。Android用GoogleドライブAPI(GDAA)を使用して大容量ファイルをGoogleドライブにアップロード

はGoogleドライブにファイルをアップロードするには、あなたがDriveContentsを作成する必要があります。

私の問題は次のようです。

次のいずれかの薄い空気からそれらを作成することによって、次の操作を行います。

DriveApi.DriveContentsResult driveContentsResult = Drive.DriveApi.newDriveContents(getGoogleApiClient()).await(); 
DriveContents contents = driveContentsResult.getDriveContents(); 

それとも、既存のファイルを開くことにより、これを行うには:

DriveApi.DriveContentsResult driveContentsResult = driveFileResult.getDriveFile().open(getGoogleApiClient(), DriveFile.MODE_WRITE_ONLY, null).await(); 
DriveContents contents = driveContentsResult.getDriveContents(); 

あなたは今でDriveContentsを埋めるために準備ができていますデータ。このOutputStreamを充填することによりGoogleはちょうどアップロードする私がしたいファイルをコピーサービスを再生すると:どこ問題開始さて、これは

FileOutputStream fileOutputStream = new FileOutputStream(driveContentsResult.getDriveContents().getParcelFileDescriptor().getFileDescriptor()); 

:あなたはOutputStreamを取得することによって、これOutputStreamに書き込むことによって、これを行いますローカルコピーを作成します。あなたの携帯電話に0.5 GBの空き容量があり、1.3 GBのファイルをアップロードしたい場合、これはうまくいかないでしょう!十分な記憶領域がありません。

これはどのように行われますか? GDAA経由でGoogleドライブに直接アップロードする方法はありますか?ローカルコピーを作成する必要はありません。その後アップロードしますか?

Google REST APIはこれらのアップロードをどのように処理しますか? Google REST API経由で実行できますか?

編集: これはGDAA経由ではできないようです。 Google REST APIで再開可能なアップロードを行う方法をお探しの場合は、my example here on StackOverflowをご覧ください。

答えて

1

Google REST APIを使用してファイルをアップロードすることはできますかどうかはわかりませんが、あなたがアップロードするデータと一緒に送信したいメタデータを持っている場合、あなたは、単一のマルチパート/関連要求を行うことができる

  • をアップロード

    マルチパート:

    あなたはMultipart uploadまたはResumable uploadを使用することができます。送信しているデータが、接続が失敗した場合に全体を再アップロードするのに十分なほど小さい場合、これは良い選択です。

再開可能アップロード

  • より確実にデータファイルをアップロードするには、再開可能アップロードプロトコルを使用することができます。このプロトコルを使用すると、通信エラーがデータフローを中断した後にアップロード操作を再開できます。これは、大きなファイルを転送しているときや、モバイルクライアントアプリからアップロードするときなど、ネットワークの中断やその他の送信エラーの可能性が高い場合に特に便利です。また、大規模なファイルアップロードを最初から再起動する必要がないため、ネットワーク障害が発生した場合の帯域幅使用量を削減できます。このSO questionで説明したようにあなたが覚えておく必要があります

  1. GDAAの主な識別子は、DriveIdは(GooPlaySvcs)GDAAに住んでいるだけとREST APIで存在していません。
  2. GDIAがファイル/フォルダをコミット(アップロード)した後でのみ、DriveIdからResourceIdを取得できます。
  3. GDAAがネットワーク要求を独自のスケジュールでバッファリングしているためREST APIは、アプリケーションが応答を待っを制御でき、一方、システム最適化)..

最後に、あなたは、AndroidでのHTTPリクエストのトークンと認証に関するこの関連SO questionを確認することができます。また、GDAAREST apiの両方についてseanpjによっていくつかの例があります。

これが役に立ちます。

関連する問題