AWS Java SDK-将ProgressListener与TransferManager结合使用

时间:2019-04-10 20:21:52

标签: java amazon-web-services amazon-s3 aws-sdk aws-java-sdk

我正在查看TransferManager的AWS开发工具包文档中提供的用法示例,尤其是以下代码:

TransferManager tx = new TransferManager(
               credentialProviderChain.getCredentials());
Upload myUpload = tx.upload(myBucket, myFile.getName(), myFile);
 // Transfers also allow you to set a <code>ProgressListener</code> to receive
// asynchronous notifications about your transfer's progress.
myUpload.addProgressListener(myProgressListener);

我想知道我们是否没有比赛条件的情况。 AFAIU TransferManager是异步工作的,它甚至可以在创建Upload对象之后甚至在添加侦听器之前立即开始上传文件,因此,如果我们使用文档中提供的代码段,似乎我们可能不会收到所有通知。我已经简要地研究了addProgressListener,但我看不到在附加新的侦听器后会重播过去的事件。我错了吗?我想念什么吗?

1 个答案:

答案 0 :(得分:1)

如果您需要获取所有事件,我想这可以通过使用另一种ProgressListener作为参数的upload方法来实现。当然,使用此方法将需要将您的存储桶名称,密钥和文件封装到PutObjectRequest的实例中。