2017-05-14 14 views
0

私はAzureブロブストレージに画像をアップロードする方法があります。私は自分のアカウントが既に作成されており、名前とキーは私のアプリに置かれています。私が見ている動作は、await UploadFromByteArrayAsync(...)が返され、私のメソッドはURLを返します。しかし、Microsoft Azure Storage Explorerで淡色のBLOBストレージに移動すると、BLOBが作成されていないことがわかります。明らかに、メソッドから返されたURLに移動すると、404も返されます。このメソッドはコンテナを正常に作成したため、適切なパーマネントとストレージアカウントに確実に接続されています。バイト配列の内容をチェックし、実際のデータが含まれています。私のイメージが決してアップロードされない理由を知っている人はいますか?CloudBlockBlob.UploadFromByteArrayAsyncが返されますが、画像が作成されていません

public async Task<string> UploadImage(byte[] imageByteArr) 
{ 
    // Retrieve storage account from the connection string. 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=redacted;AccountKey=redacted;EndpointSuffix=core.windows.net"); 

    // Create the blob client. 
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

    // Retrieve a reference to a previously created container. 
    CloudBlobContainer container = blobClient.GetContainerReference("user-images"); 

    // Create the container if it doesn't already exist. 
    await container.CreateIfNotExistsAsync().ConfigureAwait(false); 

    var docId = Guid.NewGuid().ToString(); 
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(docId); 

    await blockBlob.UploadFromByteArrayAsync(imageByteArr, 0, imageByteArr.Length); 

    blockBlob.Properties.ContentType = "image/jpg"; 
    await blockBlob.SetPropertiesAsync(); 

    return blockBlob.Uri.ToString(); 
} 
+1

この「UploadImage」メソッドをどのように呼び出すのか不思議です。あなたはこの仕上げを実行するのを待っていますか? –

+0

は、UploadImageの呼び出しで 'await'ingに問題があるようです。 UploadImageの戻り値で 'Result'プロパティを呼び出してみてください。非同期メソッドを呼び出す方法の詳細については、この返信を確認することができます - http://stackoverflow.com/questions/9343594/how-to-call-asynchronous-method-from-synchronous-method-in-c – alwayslearning

+1

アップロード後にblockBlob.ExistsAsync()呼び出しを挿入して、それが存在するかどうかを確認できますか? URLを見るためにブラウザにアクセス権を持っていない可能性があります。 – JLaanstra

答えて

-1

私が追っていたブロブのチュートリアルの作成に欠けていました。 コードビハインドでコンテナを作成するときは、アップロードされた画像にパブリックでアクセスできるように、次の関数を呼び出す必要があります。

container.SetPermissions(
    new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); 
関連する問題