【问题标题】:Downloading Azure Append Blob during upload results in error 412在上传期间下载 Azure Append Blob 会导致错误 412
【发布时间】: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


【解决方案1】:

您可以对附加 blob 进行快照,并从快照 blob 中读取。

 snapshotBlob = await appendBlob.CreateSnapshotAsync();
 text = await snapshotBlob.DownloadTextAsync();
 await snapshotBlob.DeleteIfExistsAsync();

【讨论】:

    【解决方案2】:

    根据错误消息,尝试下载 blob 内容时似乎已更改 blob 内容。如果 blob 发生更改,则 blob 的 ETag 将自动更改。请尝试使用以下代码检查并弄清楚。有关存储条件操作的更多详细信息,请参阅document

    CloudAppendBlob appendBlob = container.GetAppendBlobReference("myAppendBlob");
    appendBlob.FetchAttributes();
    var etag = appendBlob.Properties.ETag;
    try
    {
        appendBlob.DownloadToStream(ms, AccessCondition.GenerateIfMatchCondition(etag));
    }
    catch (Exception)
    {
        appendBlob.FetchAttributes();
        var updateEtag = appendBlob.Properties.ETag;
        Console.WriteLine($"Original:{etag},Updated:{updateEtag}");
        //To Do list
        //appendBlob.DownloadToStream(ms, AccessCondition.GenerateIfMatchCondition(updateEtag));
    }
    

    这里有一个类似的issue,你可以参考一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2011-03-19
      • 2012-09-11
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 2013-12-27
      相关资源
      最近更新 更多