【问题标题】:Display upload progress to Azure BLOB显示上传到 Azure BLOB 的进度
【发布时间】:2021-06-03 08:03:00
【问题描述】:

以下代码演示了将文件上传到 Azure BLOB。因此,我将上传较大的文件,由于带宽问题,我有上传失败的风险(在SO 中讨论)。

以下代码可以正常工作,但我需要一种以百分比的形式向最终用户显示上传进度的方法。如何修改我的代码以使其成为可能?

BlobUploadOptions op = new BlobUploadOptions
{
    TransferOptions = new StorageTransferOptions
    {
        MaximumTransferSize = 4 * 1024 * 1024,
        InitialTransferSize = 4 * 1024 * 1024,
        MaximumConcurrency= 5
     },
     HttpHeaders = new BlobHttpHeaders
     {
        ContentType = request.Request.ContentType
     }
};

Azure.Response<BlobContentInfo> ci = await 
   blobClient.UploadAsync(fileStream, op);

【问题讨论】:

  • 您必须使用BlobUploadOpions.ProgressHandler 来监听上传进度事件,然后将其实时流式传输到前端。

标签: c# azure azure-blob-storage


【解决方案1】:

请尝试以下方法:

//Define a progress handler.
class MyProgressHandler : IProgress<long>
{
    public void Report(long value)
    {
        //Do something to report the progress. I am simply printing the bytes uploaded.
        Console.WriteLine($"Bytes uploaded: {value}");
    }
}

//Use the progress handler in your upload options.
BlobUploadOptions op = new BlobUploadOptions
{
    TransferOptions = new StorageTransferOptions
    {
        MaximumTransferSize = 4 * 1024 * 1024,
        InitialTransferSize = 4 * 1024 * 1024,
        MaximumConcurrency= 5
     },
     HttpHeaders = new BlobHttpHeaders
     {
        ContentType = request.Request.ContentType
     },
     ProgressHandler = new MyProgressHandler()
};

【讨论】:

  • 只是一个后续问题,如何将上传的字节的值发送到前端
  • 我不知道,对不起。但是,如果我进行此上传,我会选择使用共享访问签名从浏览器直接上传到 Azure 存储,而不是从该 Web 层进行上传。
  • 对不起,我是新手。这样做有什么好处
  • 最大的优势是您可以减少 Web 服务器的负载,因为上传请求不会先到达您的 Web 服务器,然后再进入您的存储。其次,由于您绕过网络服务器并直接从浏览器上传到存储(无论如何您都想做),所以速度要快得多。
  • 我的要求是我需要上传一个大小为 500mb - 1Gb 的文件。在这种情况下,根据您的说法,浏览器将能够直接上传到 Azure Blob,而无需通过 Web 层。我说的对吗?
猜你喜欢
  • 2014-02-09
  • 2012-04-15
  • 2021-03-02
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 2013-12-20
相关资源
最近更新 更多