Amazon S3 java sdk - 下载进度

时间:2016-10-10 20:52:42

标签: java amazon-s3 amazon

尝试从亚马逊下载文件时,如何输出干净计数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。有什么建议?

1 个答案:

答案 0 :(得分:1)

如果您为进度更新预留了单独的帖子,那么我就不会发现第一种方法有任何问题 - 您可以添加类似TimeUnit.SECONDS.sleep(1)的内容来每秒更新进度而不是循环所有时间。另一方面,在第二种方法中,您只需将getBytesTransferred()除以getBytes()即可得到百分比,这似乎也不会太难: - )