3

我正在使用 Amazon 提供的高级 API将文件上传到 Amazon S3。我使用提供的示例的轻微修改版本:

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%,将不会再次更新。它似乎更新了两次然后挂起。

如果我使用 Cyber​​duck 从外部检查文件是否存在,它似乎已成功上传文件。

4

1 回答 1

3

从您的代码片段中,您不会再获得任何更新,因为您已经陷入循环,因为这upload.isDone()是真的。如果添加:

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

循环结束后,您将看到该Completed消息。您可能会看到多条 100% 消息,因为 TransferManager 正在等待上传完成。

于 2012-10-10T23:51:17.417 回答