【发布时间】:2020-09-19 03:12:15
【问题描述】:
我有一个上传服务器,每分钟将一个新块附加到附加 blob。它为每个块附加大约 2MB 的数据:
await blob.AppendBlockAsync(new MemoryStream(data)).ConfigureAwait(false);
在运行时,我需要能够在任何给定时间下载整个附加 blob。假设 20 小时后,我需要下载整个附加 blob,而上传服务器继续。 20 小时 x 60 分钟 x 2MB = 2,400MB。我是这样下载的:
await blob.DownloadToStreamAsync(ms).ConfigureAwait(false);
问题是我无法在一分钟内下载 2,400MB。结果,当上传服务器追加另一个块时,DownloadToStreamAsync 方法抛出异常:
远程服务器返回错误:(412) The condition specified 不满足使用 HTTP 条件标头..
DownloadToStreamAsync() 包含允许指定 Microsoft.WindowsAzure.Storage.AccessCondition 的重载,但是,似乎没有任何选项可以解决此问题。如果您只能在 C# 中解决此问题(不使用 AZCopy 等任何工具),我会将您的答案标记为正确。谢谢!
【问题讨论】:
-
不如简单地调用DownloadToStreamAsync来列出blocks并自己一个一个下载呢?看起来 DownloadToStreamAsync 会自动传入 ETag 访问条件,以避免下载数据不一致。
-
是的,这可行,但不应该有更简单的方法吗?这似乎是附加 blob 的常见用例。
-
给定的答案是否解决了您的问题?我也在为此苦苦挣扎。
标签: c# azure azure-storage azure-blob-storage