【发布时间】:2015-09-04 16:08:17
【问题描述】:
问题背景:
我有一个基本的 MVC 4 站点,并试图显示存储在我的 Azure 云帐户的 blob 存储容器中的图片。我将图像列表Uri's 存储在字符串List 中,并将它们传递给它们应该显示的View
问题:
我似乎无法获取存储在容器中的图像的文件名。
下图显示了 Azure 中的容器。 注意里面存储了一张大小为101.28KB的图片:
这是我试图用来检索 blob 然后读取图像Uri's 的代码:
AzureStorageController 与 Pics 操作方法:
public ActionResult Pics()
{
var imageList = new List<string>();
var imagesAzure = new myBlobStorageService();
var container = imagesAzure.GetCloudBlobContainer();
foreach (var blobItem in container.ListBlobs())
{
imageList.Add(blobItem.Uri.ToString());
}
return View(imageList);
}
myBlobStorageService 类的GetCloudBlobContainer 方法:
public CloudBlobContainer GetCloudBlobContainer()
{
string accountName = "fmfcpics";
string accountKey = "xxxxxx/yyyyyyyyy/3333333333==";
StorageCredentials credentials = new StorageCredentials(accountName, accountKey);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("images");
if (container.CreateIfNotExists())
{
container.SetPermissions(new BlobContainerPermissions() { PublicAccess = BlobContainerPublicAccessType.Blob });
}
return container;
}
Pics 查看:
@{
ViewBag.Title = "Pics";
}
<h2>Pics</h2>
@foreach (var item in Model)
{
<img src="@item" alt="picture" width="200" height="200" />
}
列表中正在传递给图片视图的 Uri 是:https://fmfcpics.blob.core.windows.net/images/myblob,但它没有图像文件名。
对此的任何帮助将不胜感激。
【问题讨论】:
-
您应该从 blob 返回图像本身。你这样做的方式,直接使用url是行不通的,因为应用程序没有访问存储帐户的权限。
-
请检查 blob 容器的 ACL 并确保它不是“私有”。
-
你应该关闭这个问题,因为我回答了你关于 blob 命名的另一个问题,它也恰好回答了这个问题。 TL;DR:您正在返回 blob 名称,即
myblob。
标签: asp.net-mvc-4 azure azure-storage azure-blob-storage