CloudBlockBlob.UploadFromByteArrayAsync返回,但未创建任何图像

时间:2017-05-14 11:44:38

标签: c# azure azure-storage-blobs azure-blob-storage

我有一种将图像上传到Azure blob存储的方法。我已经创建了自己的帐户,并在我的应用中放置了名称和密钥。我看到的行为是await UploadFromByteArrayAsync(...)返回,我的方法返回一个URL。但是,当我在Microsoft Azure Storage Explorer中导航到我的azure blob存储时,我可以看到没有创建blob。显然,导航到该方法返回的URL也返回404。该方法已经成功创建了我的容器,因此与我的存储帐户的相应权限有明确的连接,我检查了字节数组的内容,它包含实际数据。有谁知道为什么我的图片永远不会上传?

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 个答案:

答案 0 :(得分:0)

我错过了创建我正在关注的blob教程的一步。 我们需要在代码隐藏中创建容器时调用以下内容,以便我们可以公开访问上传的图像。

container.SetPermissions(
    new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });