亚马逊S3文件上传进度永远不会达到100%

时间:2018-04-18 16:26:51

标签: c# .net azure amazon-s3 azure-functions

我正在使用Azure功能和AWS .NET库从流中将blob上传到S3。在此传输过程中,我订阅了UploadProgressEvent,它接收传输的字节数和完成百分比。

           uploadRequest.UploadProgressEvent +=
new EventHandler<UploadProgressArgs>
    (uploadRequest_UploadPartProgressEvent);

在这种情况下,我使用实体框架将字节和百分比记录到数据库中,这样我就可以看到发生了什么。

      public void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs e)
{
AppDbContext db = new AppDbContext (ConfigurationManager.ConnectionStrings["name"].ConnectionString);
        BlobTriggerLog r = new BlobTriggerLog() { blobName = this.blobName, started = DateTime.Now, awsPercent = e.PercentDone, awsBytesCopied = e.TransferredBytes };
        db.BlobTriggerLogs.Add(r);
         db.SaveChanges();
        transferPercent = e.PercentDone;
}

问题:当我在本地运行该功能时,一切都按计划进行,我得到一个从0-100%完成的日志,显示我的事件被触发到上传结束。但是,当我在Azure中运行该功能时,尽管上传成功完成,但事件在达到100%之前会停止触发。对于大文件(100Mb +),在记录停止之前,它通常会达到80-98%。该功能在Azure中标记为已执行且没有错误。

还有其他人遇到过这个问题吗?

我的通话功能中有一个阻止等待上传达到100%。

            while(aws.transferPercent != 100)
        {
            Task.Delay(TimeSpan.FromSeconds(0.5)).Wait();
        }

aws.transfer percent是与我的进度事件在同一个类中的变量。

1 个答案:

答案 0 :(得分:0)

That might be becoz you are having bunch of logic in your callback,

  public void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs e)
{
        // Just perform a log on e.PercentDone and you can see 100% out there.
}

Hope it helps.