После того, как я использую метод CloudBlob.BeginUploadFromStream () для загрузки файла, я позже получаю исключение StorageClientException с StorageErrorCode.ResourceNotFound при попытке извлечь файл для загрузки.Если я загружаю тот же файл, используя метод CloudBlob.UploadFromStream (), то блоб СУЩЕСТВУЕТ, и я могу его скачать.
вот мой код загрузки:
var client = _storageAccount.CreateCloudBlobClient();
var container = client.GetContainerReference(BLOB_CONTAINER_DOCUMENTS_ADDRESS);
container.CreateIfNotExist();
string blobName = id.ToString();
var newBlob = container.GetBlobReference(blobName);
if (newBlob.Exists())
{
var stream = newBlob.OpenRead();
return stream;
}
else
{
throw new Exception("Blob does not exist!");
}
Exists - это метод расширения,Я получаю StorageClientException с кодом ошибки ResourceNotFound при использовании метода BeginUploadFromStream ()
public static bool Exists(this CloudBlob blob)
{
try
{
blob.FetchAttributes();
return true;
}
catch (StorageClientException e)
{
if (e.ErrorCode == StorageErrorCode.ResourceNotFound)
{
return false;
}
else
{
throw;
}
}
}
И мой вызов для загрузки
var blob = container.GetBlobReference(blobName);
Это НЕ вызовет исключение, когда япозже проверьте, существует ли BLOB-объект
blob.UploadFromStream(fileStream);
Это будет
AsyncCallback uploadCompleted = new AsyncCallback(OnUploadCompleted);
blob.BeginUploadFromStream(fileStream, uploadCompleted, documentId);
РЕДАКТИРОВАТЬ
Как и предполагалось, у меня не было звонкаEndUploadFromStream()
метод.Вот мой обновленный вызов для загрузки:
blob.BeginUploadFromStream(fileStream, uploadCompleted, blob);
И мой обработчик
private void OnUploadCompleted(IAsyncResult result)
{
var blob = (CloudBlob) result.AsyncState;
blob.EndUploadFromStream(result);
}
При выполнении этого метода EndUploadFromStream()
выдает WebException
с сообщением: "The request was aborted: The request was canceled."
InnerException
это "Cannot close stream until all bytes are written."
Кто-нибудь знает, что здесь происходит?