将 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 文件共享?

azure blob 存储“找不到有效的帐户信息组合”

在 Azure Blob 存储上托管多个静态网站

需要通过oledb连接从azure存储blob容器中读取excel文件

Blob 存储与 Azure Functions 的兼容性

从 Azure Excel blob 文件将数据导入 SQL Server