Загрузка Azure Append Blob во время загрузки приводит к ошибке 412 - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть сервер загрузки, который каждую минуту добавляет новый блок к добавляемому BLOB-объекту.Он добавляет около 2 МБ данных для каждого блока:

await blob.AppendBlockAsync(new MemoryStream(data)).ConfigureAwait(false);

Пока он запущен, мне нужно иметь возможность загружать весь дополнительный блок в любой момент времени.Предположим, что через 20 часов мне нужно загрузить весь бланк добавления, пока сервер загрузки продолжается.20 часов x 60 минут x 2 МБ = 2400 МБ.Я загружаю вот так:

await blob.DownloadToStreamAsync(ms).ConfigureAwait(false);

Проблема в том, что я не могу загрузить 2400 МБ менее чем за одну минуту.В результате, когда сервер загрузки добавляет другой блок, метод DownloadToStreamAsync выдает исключение:

Удаленный сервер возвратил ошибку: (412) Условие, указанное с помощью условных заголовков HTTP, не являетсяmet ..

DownloadToStreamAsync () включает в себя перегрузку, которая позволяет указывать условие Microsoft.WindowsAzure.Storage.AccessCondition, однако, похоже, что не существует каких-либо опций, решающих эту проблему.Я отмечу ваш ответ как правильный, если вы сможете решить эту проблему только в C # (без использования таких инструментов, как AZCopy и т. Д.).Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2018

Согласно сообщению об ошибке, кажется, что содержимое BLOB-объектов было изменено при попытке загрузить содержимое BLOB-объектов.ETag большого двоичного объекта будет изменено автоматически при изменении большого двоичного объекта.Пожалуйста, попробуйте использовать следующий код, чтобы проверить и выяснить это.Более подробную информацию об условных операциях хранения см. В документе .

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));
}

Здесь вы можете обратиться к аналогичной проблеме .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...