我知道這已被問到,但標記的解決方案不正確。通常這篇文章被標記爲解決方案:http://blogs.msdn.com/b/kwill/archive/2013/03/06/asynchronous-parallel-block-blob-transfers-with-progress-change-notification-2-0.aspx獲取Azure Blob上的實際上傳進度
它的工作原理,並給出一個實際的進展,但沒有實時的進步(以及在某些情況下,它給出了一個完全錯誤的值)。讓我來解釋:
它提供了有關本地讀緩衝區的進展,所以,當我上傳有我的第一個「上傳值」是讀緩衝區總大小。在我的情況下,這個緩衝區是4mb,所以每個小於4mb的文件的結果在0秒內完成進度條,但它需要真正的上傳時間才能完成。另外,如果你試圖在上傳開始之前殺死你的連接,它會給出第一個緩衝區大小的實際進度,所以對於我的1mb文件,我得到100%進度,而斷開。
我發現另一篇文章中有另一種解決方案,它讀取來自蔚藍每次HTTP響應它完成單塊上傳,但我需要我的塊是4MB(因爲單個文件最大模塊數爲50.000)和即使塊尺寸較小,它也不是完美的解決方案。
的第一篇文章覆蓋了流類,並創建一個ProgressStream
類與每觸發一個讀完成時間ProgressChanged
事件,有一些方法來知道實際上傳字節時ProgressChanged
被觸發?
請問你能解釋一下你的意思嗎?'但是我需要我的塊爲4mb(因爲單個文件的最大塊數是50.000),即使塊大小很低,它也不是一個完美的解決方案? –
@GauravMantri我的意思是,因爲我可以知道塊上傳是否完成,如果我上傳塊大小爲250kb(例如),我可以知道上傳進度爲250kb的錯誤(仍然不可接受)。另外,單個塊blob最多可以有50.000個塊,所以我的最大單個文件大小變爲250kb * 50.000 = 12.5gb(不是最優)。塊越小,精度越好,但最大文件變得越小:( – HypeZ