CloudBlob.BeginUploadFromStream()メソッドを使用してファイルをアップロードした後、ファイルをダウンロードするときにStorageErrorCode.ResourceNotFoundでStorageClientExceptionが発生します。 CloudBlob.UploadFromStream()メソッドを使用して同じファイルをアップロードすると、BLOBは存在し、ダウンロードできます。BeginUploadFromStreamを使用しているときにBlobが存在しません
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!");
}
存在は、拡張メソッドです:
は、ここに私のダウンロードコードです。私があれば、私は後で確認するときに、この例外がスローされません
var blob = container.GetBlobReference(blobName);
アップロードする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;
}
}
}
そして、私のコールを使用するとき、私は、エラーコードResourceNotFoundでStorageClientExceptionを取得していますブロブが存在
blob.UploadFromStream(fileStream);
この意志
AsyncCallback uploadCompleted = new AsyncCallback(OnUploadCompleted);
blob.BeginUploadFromStream(fileStream, uploadCompleted, documentId);
012示唆したように
EDIT
、私はEndUploadFromStream()
メソッドの呼び出しを持っていませんでした。 "Cannot close stream until all bytes are written."
誰もがいずれかを持っている"The request was aborted: The request was canceled."
InnerException
:
blob.BeginUploadFromStream(fileStream, uploadCompleted, blob);
そして、私のハンドラこれを実行する
private void OnUploadCompleted(IAsyncResult result)
{
var blob = (CloudBlob) result.AsyncState;
blob.EndUploadFromStream(result);
}
、EndUploadFromStream()
方法はMSGでWebException
がスローされます。ここにアップロードするために私の更新呼び出しですここで何が起こっているのか?
この提案に感謝、私は)EndUploadFromStream(への呼び出しを持っていませんでした。今私はそれを追加し、それは例外をスローしています。しかし、これはどのように呼び出すのではないのでしょうか?私はこれらのメソッドを使用する方法の例を見つけるのに苦労している。質問が更新されました – pjacko