在Azure网站中使用Azure Blob

时间:2013-02-15 22:40:15

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

我正在制作 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);

任何帮助都将非常感激。我们也欢迎任何其他指向相关教程的链接。

非常感谢!

2 个答案:

答案 0 :(得分:2)

我假设您已将Windows Azure Storage NuGet package添加到您的Web App项目中?在您引用的引用中,这似乎并不明确,但如果您没有,则会看到一堆未解决的编译器错误。

就代码的位置而言,这取决于你。对storageAccount的赋值就像设置数据库连接字符串一样;没有什么可以通过网络,所以您可以设置一次,并在整个应用程序中将其作为一些静态类实例的一部分提供。

在创建容器方面,无论何时想要存储数据,都要这样做 - 认为它等同于在文件系统中创建文件夹,或者在关系数据库中创建表。如果您的应用程序始终将信息存储在同一个“硬编码”容器中,则可以在门户中提前设置容器,而不是在代码中创建。

如果将容器通过某些外部进程删除,那么将这样的代码放入其中会提供一些弹性;与使用SQL Server 的应用程序在执行更新/检索之前检查是否存在Employee表的方式相同,因为有可能(但不太可能)有人通过其他SQL工具删除了Employee表。

将图像保存到blob将直接放在负责启动该操作的控制器后面。这就是你在做“真正的”工作的地方。示例中的代码专门引用了一个容器productimages,因此如果您想确定没有机会删除容器(例如,通过门户网站),则可以在步骤8中紧接着代码。同样,这类似于每次访问其中的数据时检查传统客户端/服务器代码中是否存在数据库表(我们大多数人可能认为这样做太过分了,我们会使用异常处理来覆盖这种意外事件)。 / p>

答案 1 :(得分:0)

老问题,但仍然可以帮助新手!

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应用程序的控制器/你可以做这样的事情:

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());

            }


      }

    }
}