尝试从亚马逊下载文件时,如何输出干净计数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()
的难易程度。这是更正确的做法吗?
最终我想获得一个用于进度条的int。有什么建议?
答案 0 :(得分:1)
如果您为进度更新预留了单独的帖子,那么我就不会发现第一种方法有任何问题 - 您可以添加类似TimeUnit.SECONDS.sleep(1)
的内容来每秒更新进度而不是循环所有时间。另一方面,在第二种方法中,您只需将getBytesTransferred()
除以getBytes()
即可得到百分比,这似乎也不会太难: - )