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

标签 c# amazon-web-services amazon-s3 aws-sdk

我正在使用 Nuget 的 AWS 开发工具包从 S3 下载文件。这涉及创建 GetObject 请求。亚马逊有 an example of how to do this在他们的文档中,尽管我实际上使用的是该方法的异步版本。

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

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 来做到这一点。

最佳答案

你可以这样做:

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}%");
}

关于c# - 我可以使用 AWS 开发工具包监控 S3 下载的进度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31992221/

相关文章:

c# - 高阶函数返回函数什么都不返回

amazon-web-services - 为什么我需要 AWS CloudFormation 中的额外元素来插入变量

amazon-web-services - 我可以通过FTP将数据传输到AWS S3吗?

amazon-web-services - 转换在 Amazon Athena (Presto) 中无法正常工作?

c# - 连接到 SQL Server 数据库

c# - 键入单个数字时,DateTimePicker 值不会更新 onLeave

c# - 从特定索引启动单词生成器

java - Jenkins java错误

java - 我如何在 Chef 的数据包中对 "source"进行一些身份验证?

ruby-on-rails - 如何让 refinerycms 显示从 Amazon S3 与/system/images...上传的图像 url?