2017-05-14 42 views
0

我有一種方法將圖像上傳到Azure blob存儲。我已經創建了我的帳戶,並在我的應用中放置了名稱和密鑰。我看到的行爲是await UploadFromByteArrayAsync(...)返回並且我的方法返回一個URL。但是,當我導航到Microsoft Azure存儲資源管理器中的azure 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的問題。嘗試在UploadImage的返回值上調用「Result」屬性。有關如何調用異步方法的更詳細說明,可以查看此回覆 - http://stackoverflow.com/questions/9343594/how-to-call-asynchronous-method-from-synchronous-method-in-c – alwayslearning

+1

你可以在上傳後插入blockBlob.ExistsAsync()調用來查看它是否存在嗎?您可能只是沒有在瀏覽器中查看網址的權限。 – JLaanstra

回答

-1

我錯過了創建我所關注的blob教程的步驟。 我們需要在代碼隱藏中創建容器時調用以下內容,以便我們可以公開訪問上傳的圖像。

container.SetPermissions(
    new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); 
相關問題