3

Amazonが提供する高レベルAPIを使用して、AmazonS3にファイルをアップロードしています。提供されている例のわずかに変更されたバージョンを使用します。

public Upload uploadFile() {

    transferManager = new TransferManager(new BasicAWSCredentials("KEY", "SECRETKEY"));
    upload = transferManager.upload(existingBucketName, keyName, new File(filePath));
    return upload;
}

その間、別のスレッドから、私はその進捗状況を測定しています:

while (!upload.isDone()) {
        System.out.println("upload prog " + upload.getProgress().getPercentTransfered() + " state " + upload.getState());
        Thread.sleep(200);
}

理にかなった進捗が得られているので、進捗レポート自体はうまく機能しているようです。ただし、100%に達すると、アップロードは停止します。isDone()の呼び出しがブロックされているように見えます。これは、単に更新されないためです。

出力

upload prog 91.9009559586608 state InProgress
upload prog 95.31523296022095 state InProgress
upload prog 99.01403304524446 state InProgress
upload prog 100.0 state InProgress
upload prog 100.0 state InProgress

パーセンテージは、100%に達すると、再度更新されません。2回更新されてからハングするようです。

Cyber​​duckを使用して外部でファイルの存在を確認すると、ファイルが正常にアップロードされたように見えます。

4

1 に答える 1

3

コードスニペットからは、ループを通過したため、これ以上更新を取得しません。これupload.isDone()はtrueであるためです。追加する場合:

System.out.println("upload prog " + upload.getProgress().getPercentTransfered() + " state " + upload.getState());

ループが終了すると、Completedメッセージが表示されます。TransferManagerがアップロードの完了を待機しているため、100%のメッセージが複数表示される可能性があります。

于 2012-10-10T23:51:17.417 に答える