gpt4 book ai didi

c# - 获取 Azure Blob 上的实际上传进度

转载 作者:行者123 更新时间:2023-12-02 06:09:56 25 4
gpt4 key购买 nike

我知道这已经被问过,但标记的解决方案不正确。通常这篇文章被标记为解决方案:https://learn.microsoft.com/en-us/archive/blogs/kwill/asynchronous-parallel-blob-transfers-with-progress-change-notification-2-0

它可以工作并给出实际进度,但不是实时进度(并且在某些情况下它给出完全错误值)。让我解释一下:

它给出了本地读取缓冲区的进度,因此当我上传某些内容时,我的第一个“上传值”是读取缓冲区总大小。在我的例子中,这个缓冲区是 4mb,因此每个小于 4mb 的文件都会导致进度条在 0 秒内完成,但真正完成需要真正的上传时间。

此外,如果您尝试在上传开始之前终止连接,它会给出第一个缓冲区大小作为实际进度,因此对于我的 1mb 文件,在断开连接时我会获得 100% 的进度。

我发现另一篇文章有​​另一个解决方案,它每次完成单个 block 上传时都会读取来自azure的http响应,但我需要我的 block 为4mb(因为单个文件的最大块数)是 50.000),即使 block 大小较小,它也不是一个完美的解决方案。

第一篇文章重写了流类并创建了一个 ProgressStream 类,其中包含每次读取完成时都会触发的 ProgressChanged 事件,有一些方法可以知道触发 ProgressChanged实际上传字节数?

最佳答案

您可以使用类似于 https://learn.microsoft.com/en-us/archive/blogs/kwill/asynchronous-parallel-block-blob-transfers-with-progress-change-notification 的代码来完成此操作(您引用的博客文章的 1.0 版),但您不是调用 m_Blob.PutBlock,而是使用 HTTPWebRequest 对象上传 block 并使用 HTTPWebRequest 类中的进度事件。这会带来更多的代码复杂性,并且您必须添加一些额外的错误处理。

另一种方法是从 GitHub 下载存储客户端库源代码并修改 block 上传方法以跟踪和报告进度。您在这里将面临的挑战是,如果您打算及时了解最新的修复,则必须对 SCL 的每个新版本进行这些相同的更改。

关于c# - 获取 Azure Blob 上的实际上传进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21239084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com