我可以使用AWS开发工具包监视S3下载的进度吗?

soa*_*gem 3 c# amazon-s3 amazon-web-services aws-sdk

我正在使用Nuget的AWS开发工具包软件包从S3下载文件。这涉及创建一个GetObject请求。亚马逊在他们的文档中提供了一个有关如何执行此操作的示例,尽管我实际上正在使用该方法的异步版本。

我下载文件的代码如下所示:

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

这有效;它会成功下载文件。但是,这似乎有点像个黑匣子,因为我从未真正知道下载文件需要多长时间。我希望做的是获得某种Progress事件,以便我可以显示一个漂亮的WPF ProgressBar并观看下载进度。这意味着我将需要知道文件的大小和下载的字节数,而且我不确定是否可以使用AWS开发工具包执行此操作。

小智 5

你可以做:

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}%");
}
Run Code Online (Sandbox Code Playgroud)