我可以使用AWS SDK监控S3下载的进度吗?

本文关键字:下载 S3 可以使 AWS SDK 监控 我可以 | 更新日期: 2023-09-27 18:07:42

我正在使用Nuget的AWS SDK包从S3下载文件。这涉及到创建一个GetObject请求。Amazon在他们的文档中有一个如何做到这一点的示例,尽管我实际上使用的是该方法的async版本。

我下载文件的代码看起来像这样:

using (var client = new AmazonS3Client(accessKey, secretAccessKey, RegionEndpoint.USEast1))
{
    var request = new GetObjectRequest
    {
        BucketName = "my-bucket",
        Key = "file.exe"
    };
    using (var response = await client.GetObjectAsync(request))
    {
        response.WriteResponseStreamToFile(@"C:'Downloads'file.exe");
    }
}
这个作品

;成功下载文件。然而,这似乎有点像一个黑盒子,因为我从来没有真正知道下载文件需要多长时间。我希望做的是获得某种Progress事件,这样我就可以显示一个漂亮的WPF ProgressBar并观看下载进度。这意味着我需要知道文件的大小和下载的字节数,我不确定是否有一种方法可以使用AWS SDK做到这一点。

我可以使用AWS SDK监控S3下载的进度吗?

你可以这样做:

using (var response = client.GetObject(request))
{
  response.WriteObjectProgressEvent += Response_WriteObjectProgressEvent;
  response.WriteResponseStreamToFile(@"C:'Downloads'file.exe");
}
private static void Response_WriteObjectProgressEvent(object sender, WriteObjectProgressArgs e)
{
  Debug.WriteLine($"Tansfered: {e.TransferredBytes}/{e.TotalBytes} - Progress: {e.PercentDone}%");
}

你能钩入WriteObjectProgressEvent对象吗?如果从该对象订阅事件,则在下载期间将多次调用函数。它将接收已下载/剩余的字节数,以便您可以构建进度指示器。