Amazon S3上传在100%时卡住/挂起

3

我正在使用亚马逊提供的高级API将文件上传到亚马逊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检查文件是否存在,它似乎已经成功上传了该文件。

1个回答

3

从您的代码片段可以看出,由于upload.isDone()为true,所以您已经跳出了循环,因此不会再收到任何更新。如果您添加:

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

在您的循环结束后,您将看到“已完成”消息。您可能会看到多个100%的消息,因为TransferManager正在等待上传完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接