1

ファイルの圧縮バックアップをクラウドにアップロードする Android アプリケーションがあります。

最近まで、私は Dropbox だけを使用していましたが、非常にうまく機能していました。

最近、Google ドライブのサポートを実装することにしました。

ファイルが小さい場合 (約 15Mb)、動作しています... ほとんどの場合 (アップロードの開始後に 401 エラーが発生することがあります)。

ファイルが大きい場合 (>1Gb)、常にエラーが発生します。

java.io.IOException: unexpected end of stream

これが私のコードです:

public CloudResult sendFile(File fileContent, long added) {
    CloudResult result = new CloudResult();

    try {

        mProgress = new FileUploadProgressListener(fileContent.getName());
        mediaContent = new FileContent(ZIP_MIME_TYPE, fileContent);

        com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File();
        body.setTitle(fileContent.getName());
        body.setMimeType(ZIP_MIME_TYPE);

        Drive.Files.Insert inserted = getDrive().files().insert(body, mediaContent);
        inserted.getMediaHttpUploader()
                .setDirectUploadEnabled(false)
                .setChunkSize(MediaHttpUploader.DEFAULT_CHUNK_SIZE)
                .setProgressListener(mProgress);

        com.google.api.services.drive.model.File f = inserted.execute();

        // loop over all files in drive and see if any need to be
        // synced locally
        FileList driveFilesList = getDrive().files().list().execute();

        mTotalUploaded = added;
        for (com.google.api.services.drive.model.File remote : driveFilesList.getItems()) {
            Log.d(Ln.TAG, remote.getLabels().toPrettyString());
        }
    } catch (IOException e) {
        result = new CloudResult(getClass().getSimpleName() + " - " + e.getLocalizedMessage());
        if (Ln.DEBUG) {
            Log.e(Ln.TAG, "Error in GDrive - " + e.getLocalizedMessage(), e);
        }
    }
    return result;
}

InputStream を実際に制御できないため、何をすべきかわかりません。

プロセス中にすでにいくつかのウェイカーがあります。

すべてがサービス内のスレッドで実行されます。サービスは Dropbox と同じなので、エラーはこのコードの実行方法に関するものではありません。別の場所にあるのですが、場所がわかりません!GDrive のバグの可能性があります。

私はこれらのスレッドを見つけましたが、本当の答えはありません: Uploading jpeg to Google Drive from Android app "unexpected end of stream"

何か案は?

2番目の質問:各チャンクがアップロードされた後に呼び出されるものではなく、線形進行リスナーを取得する方法(ここでは10Mbごと)?

4

0 に答える 0