java - AWS Java SDK - 将 ProgressListener 与 TransferManager 结合使用
问题描述
我正在查看 AWS SDK 文档中为TransferManager提供的使用示例,尤其是以下代码:
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);
我想知道我们这里是否没有竞争条件的情况。AFAIUTransferManager
是异步工作的,它可能会在对象创建后立即开始上传文件Upload
,甚至在我们添加侦听器之前,所以如果我们使用文档中提供的片段,我们似乎可能不会收到所有通知。我已经简要地研究了一下addProgressListener
,我没有看到过去的事件会在附加一个新的侦听器时重播。我错了吗?我错过了什么吗?
解决方案
如果您需要获取所有事件,我想这可以使用以 a作为参数的不同upload
方法来实现。ProgressListener
当然,使用此方法需要将您的存储桶名称、密钥和文件封装到PutObjectRequest
.
推荐阅读
- reactjs - 在滚动视图中渲染反应导航屏幕
- docker - 尝试使用 docker:dind 时 gitlab-ci 失败
- r - Dbplyr:in_schema 为两个不同的数据库使用相同的连接
- c# - 在 API 基本路径 .net 核心中包含占位符
- docker - 如何使用 vue 中构建的系统环境变量?
- php - 我是 php 新手。我收到此错误,不知道如何纠正。谁能帮我这个?
- objective-c - 是否可以通过 [NSString drawAtPoint] 绘制文本或在 Metal 视图中显示 NSButton?
- mysql - Owncloud seems to ignore dbtype in config.php (using docker)
- c - Merge/Inline Structs
- visual-studio-code - Intellisense not picking up Redux store type