【问题标题】:Using Azure Blobs with Azure Website将 Azure Blob 与 Azure 网站结合使用
【发布时间】: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_{0}{1}", 
   Guid.NewGuid().ToString(), Path.GetExtension(image.FileName));
CloudBlockBlob blob = blobStorage.GetBlockBlobReference(uniqueBlobName);
blob.Properties.ContentType = image.ContentType;
blob.UploadFromStream(image.InputStream);

任何帮助将不胜感激。也欢迎任何其他相关教程的链接。

非常感谢!

【问题讨论】:

标签: azure asp.net-mvc-4 azure-blob-storage


【解决方案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());
    
                }
    
    
          }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2021-11-03
      • 2020-05-27
      相关资源
      最近更新 更多