我正在使用亚马逊提供的High-Level 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%,就不会再次更新。它似乎更新两次然后挂起。
如果我使用Cyberduck从外部检查文件是否存在,则表示已成功上传文件。
答案 0 :(得分:3)
从您的代码段开始,由于upload.isDone()
为真,因此您已经无法获得更多更新。如果你添加:
System.out.println("upload prog " + upload.getProgress().getPercentTransfered() + " state " + upload.getState());
在循环结束后,您将看到Completed
消息。您可能会看到多条100%的消息,因为TransferManager正在等待上传完成。