【问题标题】:How can I get upload progress from CloudBlockBlob.UploadFromFileAsync?如何从 CloudBlockBlob.UploadFromFileAsync 获取上传进度?
【发布时间】:2014-01-05 09:06:21
【问题描述】:

我正在使用 CloudBlockBlob 对象和 UploadFromFileAsync 方法将文件上传到 Blob 存储。完成后,我将要调用一项服务,然后该服务会告诉多台计算机获取我上传的文件。但是,我注意到,当我运行它然后在 Azure 门户中检查我的文件时,它出现时会有一些延迟。我不知道这是因为门户网站需要一段时间来反映这一点,还是该文件实际上还没有。这让我想到了真正的问题,我可以使用这种方法检查文件的进度吗?也可以将其输入到进度条中。

【问题讨论】:

    标签: .net azure azure-storage azure-blob-storage


    【解决方案1】:

    【讨论】:

    • 我认为您是那篇文章的作者?我以前看过它,但我遇到了一个问题,它会显示 100% 但从未完成。
    • 罢工……有时从 TransferProgressChanged 达到 100% 到完成时需要一段时间。感谢这门课,太棒了!
    • @kwill 链接坏了。
    • @RahulR.,感谢您报告此事。重定向已修复,现在应该指向docs.microsoft.com/en-us/archive/blogs/kwill/…。
    【解决方案2】:

    在 TPL 中,报告进度的方式是通过IProgress<T> 接口。报告进度的异步方法应提供接受此接口实例的重载。

    由于该方法没有重载并且 API 没有公开任何类似的东西,我只能得出结论,不支持进度报告。

    该方法返回的Task本身会指示操作何时完成,您应该等待。

    【讨论】:

      【解决方案3】:

      进一步研究,我注意到该方法返回一个任务,我可以检查它的完整状态。但是,这并没有给我任何进展的迹象。

      【讨论】:

        【解决方案4】:

        谁还在寻找这个。

        这是一个通过progressHandler获取上传进度的示例:

        CancellationToken cancellationToken = new CancellationToken();
        IProgress<StorageProgress> progressHandler = new Progress<StorageProgress>(
            progress => Console.WriteLine("Progress: {0} bytes transferred", progress.BytesTransferred)
            );
        
        await blob.UploadFromStreamAsync(
            srcStream,
            default(AccessCondition),
            default(BlobRequestOptions),
            default(OperationContext),
            progressHandler,
            cancellationToken
            );
        

        来自 https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.storage.core.util.storageprogress?view=azure-dotnet

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-17
          • 2021-04-13
          • 2011-03-02
          相关资源
          最近更新 更多