Amazon S3 java sdk - 下载进度
Amazon S3 java sdk - download progress
试图找到如何在从亚马逊下载文件时输出 0 - 100% 的干净计数。有很多关于如何执行此上传操作的示例,但它们似乎并没有直接转化为下载。
目前我正在做以下事情
TransferManager transferManager = new TransferManager(s3Client);
Download download = transferManager.download(s3Request, downloadedFile);
while (!download.isDone()) {
LOGGER.info("Downloaded >> " + download.getProgress().getPercentTransferred());
}
这确实有效,但它多次使用相同的值向控制台发送垃圾邮件(假设它是线程化的)。
我知道我也可以这样做:
ProgressListener listener = progressEvent -> LOGGER.info("Bytes transfer >> " + progressEvent.getBytesTransferred());
GetObjectRequest s3Request = new GetObjectRequest("swordfish-database", snapshot.getKey());
TransferManager transferManager = new TransferManager(s3Client);
Download download = transferManager.download(s3Request, downloadedFile);
download.addProgressListener(listener);
download.waitForCompletion();
这也有效,但我失去了易用性 download.getProgress().getPercentTransferred()
。这是更合适的方法吗?
最终我想得到一个用于进度条的整数。有什么建议吗?
好吧,如果您为进度更新保留一个单独的线程,那么我看不到第一种方法有任何问题 - 您可以添加类似 TimeUnit.SECONDS.sleep(1)
的东西来每秒更新进度,而不是循环所有时间。另一方面,在第二种方法中,您只需将 getBytesTransferred()
除以 getBytes()
即可得到百分比,这似乎也不太难:-)
试图找到如何在从亚马逊下载文件时输出 0 - 100% 的干净计数。有很多关于如何执行此上传操作的示例,但它们似乎并没有直接转化为下载。
目前我正在做以下事情
TransferManager transferManager = new TransferManager(s3Client);
Download download = transferManager.download(s3Request, downloadedFile);
while (!download.isDone()) {
LOGGER.info("Downloaded >> " + download.getProgress().getPercentTransferred());
}
这确实有效,但它多次使用相同的值向控制台发送垃圾邮件(假设它是线程化的)。
我知道我也可以这样做:
ProgressListener listener = progressEvent -> LOGGER.info("Bytes transfer >> " + progressEvent.getBytesTransferred());
GetObjectRequest s3Request = new GetObjectRequest("swordfish-database", snapshot.getKey());
TransferManager transferManager = new TransferManager(s3Client);
Download download = transferManager.download(s3Request, downloadedFile);
download.addProgressListener(listener);
download.waitForCompletion();
这也有效,但我失去了易用性 download.getProgress().getPercentTransferred()
。这是更合适的方法吗?
最终我想得到一个用于进度条的整数。有什么建议吗?
好吧,如果您为进度更新保留一个单独的线程,那么我看不到第一种方法有任何问题 - 您可以添加类似 TimeUnit.SECONDS.sleep(1)
的东西来每秒更新进度,而不是循环所有时间。另一方面,在第二种方法中,您只需将 getBytesTransferred()
除以 getBytes()
即可得到百分比,这似乎也不太难:-)