在Windows Azure平台上管理文件

今天这篇文章用来阐述如何在Windows Azure的平台上管理应用程序文件权限,如你所知,在Azure平台上运行的程序不建议将用户的文件放在一台Server上面,因为Azure平台通常是多个实例同时运行的,而用户是不知道自己是在访问那一个instance(由load balancer自动分配)相互之间如果需要访问这些Server上的文件,必须通过internal endpoint来访问这些文件,通常你还需要对这些文件进行同步,即一个instance上面的用户文件更新了,你必须还要将这个更新分配给所有instance。

所以我们建议把数据放在Azure的Storage里面(也可以是SQL Azure),利用云存储来解决在多个instance之间数据共享的问题,而这将会带来一些问题,例如我们需要对某些数据进行保护而不是让所有人都能访问到,你可能会想到通过设置BlobContainer的权限来做到这一点,但是似乎为每个用户去申请一个Container似乎不是非常好,因为每个BlobContainer可以容纳100T的数据,比较浪费。所以这里我们通过这个示例来做到这一点,这里将会按照文件路径的形式来处理Blob文件,同时利用HttpModulerr来处理访问的文件。

[本示例完整源码下载]

免费下载地址在

用户名与密码都是

具体下载目录在 /2012年资料/7月/27日/在Windows Azure平台上管理文件/

先决条件:

下载Azure SDK 1.6,并且保证已经安装了SQL Server express版本。

名称为CSAzureServeFilesFromBlobStorage, 并且选择建立一个Web Role。这里我们同样会使用Table Storage来管理Blob文件,如果我们需要查询功能,只需要访问这个Table便可以得到Blob的一些信息:

创建一个class library来处理Table Storage:

FileEntity 实体类:

public class FileEntity : TableServiceEntity   {       /// <summary>        /// No parameters constructor        /// </summary>        public FileEntity()       {           PartitionKey = "all";           RowKey = string.Format("{0:10}-{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid()).Replace("-""");       }          /// <summary>        /// With parameters constructor        /// </summary>        /// <param name="partitionKey"></param>        public FileEntity(string partitionKey)       {           PartitionKey = partitionKey;           RowKey = string.Format("{0:10}-{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid()).Replace("-""");       }          public string FileName       {           get;           set;       }          public string FileUrl       {           get;           set;       }   }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4bef8aa1960afa558de776977697bf7e.html