2013-02-15 89 views
3

我正在制作一个MVC Windows Azure网站,其中涉及用户上传图像。 我想将图像存储在斑点中。 我搜索了教程,但其中大多数处理Web应用程序,而不是MVC网站。在Azure网站上使用Azure Blob

唯一有用的教程中,我发现: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); 

任何帮助将非常感激。任何其他链接到相关教程也欢迎。

非常感谢!

+0

看看这个:http://www.tugberkugurlu.com/archive/how-to-use- windows-azure-blob-storage-service-with-asp-net-mvc-web-application – JuneT 2013-02-15 23:53:33

+0

谢谢!这真的有帮助! – 2013-02-20 18:37:05

回答

2

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

就代码的用途而言,这取决于您。分配到storageAccount就像设置数据库连接字符串一样;没有任何事情可以通过网络,因此您可以设置它一次,并将其作为某个静态类实例的一部分在整个应用程序中使用。

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

像这样的代码虽然提供了一点弹性,以防通过外部进程删除容器;与使用SQL Server 的应用程序在更新/检索之前检查是否存在Employee表相同,因为可能(但不太可能)某人通过其他SQL工具删除了Employee表。

将图像保存到blob将直接放在负责启动该操作的任何控制器之后。这是你做'真正'工作的地方。您示例中的代码特别引用了容器productimages,因此如果您希望确定容器没有被删除的机会(例如通过门户网站),则可以立即在第8步的代码之前加入代码。再次,这与检查传统客户端/服务器代码中数据库表是否存在(每次访问其中的数据时都是如此)(我们大多数人可能认为是过度杀毒,并且我们会诉诸异常处理以涵盖该意外事件)类似。

0

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

Azure Web应用程序接受MVC应用程序。Azure上的Web应用程序只是一个容器,我肯定可以使用不同类型的基于ASP.NET的应用程序,Forms或MVC,C#或VB.net。

假设您知道MVC应用程序的基础知识,您可以创建Azure Web应用程序并将其发布到那里。这是直截了当的。

此代码:

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

可以去新一类专门针对斑点的服务例如把它像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()); 

      } 


     } 

    } 
}