簡體   English   中英

Stream 文件到 Azure Blob 存儲?

[英]Stream files to Azure Blob Storage?

考慮以下代碼:

 var container = new BlobContainerClient(...);
 // fileStream is a stream delivering 10 MB of data
 await container.UploadBlobAsync("name-of-blob", fileStream);

使用 Fiddler Proxy 觀看 HTTP 請求,我可以看到這以 4 個 HTTP PUT 請求結束(地址是 127.0.0.1,因為我正在使用 Azurite 模擬器進行本地測試): 在此處輸入圖像描述

前兩個請求(603 和 607)大小為 4 MB,第三個請求(613)大小為 2 MB,第四個請求(614)最終提交所有發送的塊。

  1. 除了對數據發出 3 個請求(4 MB + 4 MB + 2 MB)之外,是否有可能以某種方式在一個請求中將 10 MB 的數據發送到 stream 以節省一些開銷?

  2. 由於數據以 4 MB 塊發送,這是否意味着 Azure 存儲客戶端等到它從fileStream獲得 4 MB 才開始發送,這意味着 4 MB 的 RAM 用於緩存? 我使用fileStream的意圖是通過將 fileStream 直接傳遞到 Azure Blob Storage 來減少 memory 的使用。

我正在使用Azure.Storage.Blobs版本 12.8.0(我寫這篇文章時的最新穩定版本)。

廣告 1) PUT 操作中單個塊的最大大小取決於 Azure 存儲服務器版本(請參閱此處)。 出於測試目的,我剛剛在 Azure 中創建了一個新的存儲帳戶,並使用 10.5 MB 視頻文件開始了UploadBlobAsync()操作,Fiddler 向我展示了這個

在此處輸入圖像描述

具有 10544014 字節的單個 PUT 操作。 請注意x-ms-version請求 header,它使客戶端能夠指定要使用的版本(請參見此處)。 我想您的本地模擬器只是使用較舊的 API 版本。

廣告 2) 是的,對於較大的文件UploadBlobAsync()將分塊請求,從 stream 讀取一組字節,執行 PUT,讀取下一組字節,執行 PUT 等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM