【问题标题】:Amazon S3 java sdk - download progressAmazon S3 java sdk - 下载进度
【发布时间】:2016-10-10 20:52:42
【问题描述】:

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

【问题讨论】:

  • 好吧,如果您保留一个单独的线程来更新进度,那么我看不到第一种方法有任何问题 - 您可以添加类似 TimeUnit.SECONDS.sleep(1) 的内容来每秒更新进度,而不是循环所有时间。另一方面,在第二种方法中,您只需将getBytesTransferred() 除以getBytes() 即可获得百分比,这似乎也不太难:-)
  • 哦,当然!出于某种原因,我的头脑在想睡觉会使实际下载睡眠(因此减慢速度),这就是为什么我一开始没有这样做的原因。我的一半脑袋放屁。如果你写一个,很高兴接受这个作为答案:)

标签: java amazon-s3 amazon


【解决方案1】:

好吧,如果您为进度更新保留一个单独的线程,那么我认为第一种方法没有任何问题 - 您可以添加类似 TimeUnit.SECONDS.sleep(1) 的内容来每秒更新进度,而不是一直循环。另一方面,在第二种方法中,您只需将getBytesTransferred() 除以getBytes() 即可获得百分比,这似乎也不太难:-)

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2023-03-19
    • 2021-06-09
    • 1970-01-01
    • 2014-05-07
    • 2012-06-17
    相关资源
    最近更新 更多