我正在使用Nuget的AWS SDK包从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。
答案 0 :(得分: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}%");
}
答案 1 :(得分:1)
你能挂钩到WriteObjectProgressEvent对象吗?如果您订阅此对象的事件,则在下载过程中将多次调用您的函数。它将接收下载/剩余的字节数,以便您可以构建进度指示器。