将 Azure Blob 与 Azure 网站结合使用
Posted
技术标签:
【中文标题】将 Azure Blob 与 Azure 网站结合使用【英文标题】:Using Azure Blobs with Azure Website 【发布时间】:2013-02-01 00:16:06 【问题描述】:我正在制作一个涉及用户上传图片的MVC Windows Azure网站。 我想将图像存储在 blob 中。 我搜索了教程,但其中大多数处理的是 Webapps 而不是 MVC 网站。
我找到的唯一有用的教程是:http://www.codeproject.com/Articles/490178/How-to-Use-Azure-Blob-Storage-with-Azure-Web-Sites
我是整个 MVC/Windows Azure/Visual Studio 场景的新手,在第 7 步我必须连接到云存储帐户时感到困惑。
var storageAccount = CloudStorageAccount.Parse(
ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString);
我不知道应该把那段代码放在哪里。
第 8 步中的代码相同:创建容器
blobStorage = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobStorage.GetContainerReference("productimages");
if (container.CreateIfNotExist())
// configure container for public access
var permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);
第 9 步:将图像保存到 BLOB
string uniqueBlobName = string.Format("productimages/image_01",
Guid.NewGuid().ToString(), Path.GetExtension(image.FileName));
CloudBlockBlob blob = blobStorage.GetBlockBlobReference(uniqueBlobName);
blob.Properties.ContentType = image.ContentType;
blob.UploadFromStream(image.InputStream);
任何帮助将不胜感激。也欢迎任何其他相关教程的链接。
非常感谢!
【问题讨论】:
看看这个吧:tugberkugurlu.com/archive/… 谢谢!这真的很有帮助! 【参考方案1】:我假设您已将 Windows Azure Storage NuGet package 添加到您的 Web 应用项目中?这在您引用的参考文献中似乎并不明确,但如果您不这样做,您会看到一堆未解决的编译器错误。
就代码的去向而言,这完全取决于您。对storageAccount
的赋值就像设置一个数据库连接字符串;没有任何事情发生,因此您可以设置一次,然后将其作为某个静态类实例的一部分在整个应用程序中可用。
就创建容器而言,只要您想存储数据,就可以这样做 - 认为这相当于在文件系统中创建文件夹或在关系数据库中创建表。如果您的应用程序始终将信息存储在同一个“硬编码”容器中,您可以提前在门户中设置容器,而不是在代码中创建。
将这样的代码放入其中可以提供一些弹性,以防容器通过某些外部进程被删除;与使用 SQL Server 的应用程序可以在进行更新/检索之前检查 Employee 表是否存在的方式相同,因为有可能(但不太可能)有人通过其他 SQL 工具删除了 Employee 表。
将图像保存到 blob 将直接放在负责启动该操作的任何控制器后面。这是你做“真正”工作的地方。您的示例中的代码专门引用了一个容器 productimages
,因此如果您想确定容器没有被删除的可能性(例如,通过门户),它可以紧跟在步骤 8 中的代码之前。同样,这类似于每次访问传统客户端/服务器代码中的数据库表时检查其中的数据是否存在(我们大多数人可能认为这有点过头了,我们会求助于异常处理来应对这种意外情况)。
【讨论】:
【参考方案2】:老问题,但仍然可以帮助新手!
Azure Webapps 确实接受 MVC 应用程序。 Azure 上的 Webapps 只是一个容器,我确信它可以采用不同类型的基于 ASP.NET 的应用程序、Forms 或 MVC、C# 或 VB.net。
假设您了解 MVC 应用程序的基础知识,您可以创建 Azure Webapp 并将其发布到那里。就这么直截了当。
这段代码:
var storageAccount = CloudStorageAccount.Parse(
ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString);
还有这个:
blobStorage = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobStorage.GetContainerReference("productimages");
if (container.CreateIfNotExist())
// configure container for public access
var permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);
可以进入专门针对 Blob 服务的新类,例如将其命名为 blobServices.cs 并将其保存在 MVC 应用程序的根目录中,它可能如下所示:
var storageAccount = CloudStorageAccount.Parse(
ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString);
blobStorage = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobStorage.GetContainerReference("productimages");
if (container.CreateIfNotExist())
// configure container for public access
var permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);
这可能是最佳做法。从那里开始,在 MVC 应用程序的 Controller/s 中,您可以执行以下操作:
namespace blabla.cs
public controller myBlobController
//instantiate the blob service
BlobProfileImageServices _blobServices = new BlobProfileImageServices();
public public ActionResult Index()
//call your blob storage service
//and loop through each blob
CloudBlobContainer blobContainer = _blobServices.GetCloudBlobContainer();
List<string> blobs = new List<string>();
foreach (var blobItem in blobContainer.ListBlobs())
blobs.Add(blobItem.Uri.ToString());
【讨论】:
以上是关于将 Azure Blob 与 Azure 网站结合使用的主要内容,如果未能解决你的问题,请参考以下文章
何时使用 Azure Blob 存储与 Azure 文件共享?