C# Azure blob作为Windows窗体的映像

C# Azure blob作为Windows窗体的映像,c#,windows,winforms,azure,azure-storage-blobs,C#,Windows,Winforms,Azure,Azure Storage Blobs,在我的应用程序中,我可以将一些图像上载到我在WindowsAzure上的blob存储。现在我正在开发我的应用程序的第二部分,从Azure服务器检索图像,并在picturebox中显示它们 我试过几种方法: listboxPictures.Items.Clear(); iTotalPictures = 0; CloudBlobClient blobClient = new CloudBlobClient("http://ferryjongmans.blob.core.window

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

我试过几种方法:

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控制面板中设置)时才有效。但我想在我的容器处于私有状态时获取图像

谁能帮我

(我希望描述清楚)


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

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


您无法查看图片的原因是,您为blob获取的URI没有附加SAS组件。

您获取的异常是什么?我没有获取异常,但它无法加载图像,因为当我的容器设置为私有时,blob URI不是公共的。(在picturebox中,我得到一个小“x”,上面写着“我无法加载图像”)。所以我想我需要一种替代的方式来在picturebox中显示我的图像,而不是通过blob URI。。。我不知道从哪里开始。。当我的容器公开时,一切正常。。。但是这个应用程序是为一家公司开发的,它将对安全摄像头快照进行升级。。所以我认为将容器设置设置为private并通过另一种方式进行设置很重要…?哇哈哈,我在踢自己。。。谢谢你的回答!它起作用了!
pictureBox1.ImageLocation = blobItem.Uri.ToString() + signature;