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() 即可得到百分比,这似乎也不太难:-)