c# - 将文件流式传输到 Azure Blob 存储?

标签 c# azure http stream azure-blob-storage

考虑以下代码:

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

使用 Fiddler 代理观察 HTTP 请求,我可以看到这最终产生了 4 个 HTTP PUT 请求(地址是 127.0.0.1,因为我正在使用 Azurite 模拟器进行本地测试): enter image description here

前两个请求(603 和 607)的大小为 4 MB,第三个请求(613)的大小为 2 MB,第四个请求(614)最终提交所有已发送的 block 。

  1. 是否可以在一个请求中传输 10 MB 数据以节省一些开销,而不是对数据发出 3 个请求 (4 MB + 4 MB + 2 MB)?

  2. 由于数据以 4 MB block 的形式发送,这是否意味着 Azure 存储客户端会等到从 fileStream 获取 4 MB 数据后才开始发送,这意味着需要 4 MB RAM用于缓存?我使用 fileStream 的目的是通过直接将 fileStream 传递到 Azure Blob 存储来减少内存使用量。

我正在使用 Azure.Storage.Blobs 版本 12.8.0(我撰写本文时的最新稳定版本)。

最佳答案

广告 1) PUT 操作中单个 block 的最大大小取决于 Azure 存储服务器版本(请参阅 here )。出于测试目的,我刚刚在 Azure 中创建了一个新的存储帐户,并使用 10.5 MB 视频文件启动了 UploadBlobAsync() 操作,Fiddler 向我展示了这一点

enter image description here

单个 PUT 操作占用 10544014 字节。请注意 x-ms-version 请求 header ,它使客户端能够指定要使用的版本(请参阅 here )。我想您的本地模拟器只是使用较旧的 API 版本。

Ad 2) 是的,对于较大的文件 UploadBlobAsync() 将对请求进行分块,从流中读取一组字节,执行 PUT,读取下一组字节,执行 PUT 并等等。

关于c# - 将文件流式传输到 Azure Blob 存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66291669/

相关文章:

wordpress - wp_remote_post 响应体被保护

c# - 为什么我的 Azure Function App 时间戳少了一个小时

azure - 是否可以使用 DotTrace 远程分析 Azure 网站?

azure - 使用 RLS 进行流分析的理想 Azure/Power BI 架构

java - HTML 不将数据发送到 Java 文件

java - 使用套接字的 Http 请求

c# - 动态控制在回发时丢失

c# - SQL选择两个userID作为不同的别名

c# - 有没有办法用 itextsharp 替换 PDF 文件中的文本?

python-3.x - 如何将 xlsx 或 xls 文件读取为 Spark 数据帧