2

在我的应用程序中,我可以将一些图像上传到我在 Windows Azure 上的 blob 存储。现在我正在开发我的应用程序的第二部分,从 Azure 服务器检索图像,并将它们显示在图片框中。

我尝试了几件事:

listboxPictures.Items.Clear();
iTotalPictures = 0;
CloudBlobClient blobClient =
    new CloudBlobClient("http://ferryjongmans.blob.core.windows.net/",
        new StorageCredentialsSharedAccessSignature(signature));
CloudBlobContainer container = blobClient.GetContainerReference(comboBox1.SelectedItem.ToString());
CloudBlobDirectory direct = container.GetDirectoryReference(comboBox1.SelectedItem.ToString());
BlobRequestOptions options = new BlobRequestOptions();
options.UseFlatBlobListing = true;
options.BlobListingDetails = BlobListingDetails.Snapshots;
foreach (var blobItem in direct.ListBlobs(options))
{
    listboxPictures.Items.Add(blobItem.Uri.ToString());
    iTotalPictures ++;
    lblTotal.Text = "Total frames: "+Convert.ToString(iTotalPictures);
    pictureBox1.ImageLocation = blobItem.Uri.ToString(); // This is the display box, this works only with public settings on the container
}

这有效,但仅当容器是公共的(在 Azure 控制面板中设置)时。但是当我的容器处于私有状态时,我想获取我的图像。

请问谁能帮帮我?

(我希望描述足够清楚)

当我的 blobcontainer 设置为公共 时的应用程序 当我的 blobcontainer 设置为私有时的应用程序

4

1 回答 1

2

首先,确保您的 SAS 签名已定义“读取”权限(“列表”权限将只允许列出 blob 容器中的 blob)。然后替换以下代码行:

pictureBox1.ImageLocation = blobItem.Uri.ToString();

和:

pictureBox1.ImageLocation = blobItem.Uri.ToString() + signature;

您看不到图片的原因是您为 blob 获取的 URI 没有附加 SAS 组件。

于 2013-01-29T08:42:29.970 回答