技术开发 频道

实例解读Azure Blob架构及应用开发

        第二步:添加WebRole程序代码

  在WebRole程序代码设计部分,我们要完成的任务是:设计图片实体类、设计上传显示界面,完成上传、显示、删除功能,可以说是整个案例的核心部分。

  本案例中我们要处理的Blob对象是图片文件,因此,在BlobWebRole项目中,添加一个Image图片的实体类ImageEntity,代码如下:

public class ImageEntity
    {
        
public Uri FileUri { get; set; }
        
public string FileName { get; set; }
        
public long Length { get; set; }
        
public string FolderName { get; set; }
        
public bool IsReadOnly { get; set; }
        
public bool IsExists { get; set; }
        
public string FullFileName { get; set; }
        
public string ExtendName { get; set; }
        
public string CreatorName { get; set; }
        
public DateTime CreateTime { get; set; }
    }

         添加完ImageEntity类的代码后,对Default.Aspx页面进行简单的设计,在Default页面里,有两部分,一部分是上传图片,另一部分是列表显示Blob里的数据,代码如下:

<form id="form1" runat="server">
    
<div>
        
<div><!--上传图片-->
            
<asp:Label ID="lblFilePath" Text="上传文件" AssociatedControlID="fileUploadControl"
                runat
="server" />
            
<asp:FileUpload ID="fileUploadControl" runat="server" />
            
<asp:RequiredFieldValidator ID="filUploadValidator" ControlToValidate="fileUploadControl"
                ValidationGroup
="fileInfoGroup" ErrorMessage="请选择文件!" runat="Server">
            
</asp:RequiredFieldValidator>
            
<br />
            
<asp:Label ID="lblFileName" Text="文件名称:" AssociatedControlID="txtFileName" runat="server" />
            
<asp:TextBox ID="txtFileName" runat="server" />
            
<asp:RequiredFieldValidator ID="fileNameValidator" ControlToValidate="txtFileName"
                ValidationGroup
="fileInfoGroup" ErrorMessage="请输入文件名!" runat="Server">
            
</asp:RequiredFieldValidator>
            
<br />
            
<asp:Label ID="lblCreator" Text="创 建 者:" AssociatedControlID="txtCreator" runat="server" />
            
<asp:TextBox ID="txtCreator" runat="server" />
            
<asp:RequiredFieldValidator ID="submitterValidator" ControlToValidate="txtCreator"
                ValidationGroup
="fileInfoGroup" ErrorMessage="请输入创建者!" runat="Server">
            
</asp:RequiredFieldValidator>
            
<br />
            
<asp:Button ID="btnSave" Text="保存" CausesValidation="true" ValidationGroup="fileInfoGroup"
                runat
="server" OnClick="btnSave_Click" />
            
<br />
            
<br />
            
<asp:Label ID="statusMessage" runat="server" />
        
</div>
        
<div><!--列表显示图片-->
            
<asp:GridView ID="fileView" AutoGenerateColumns="false" DataKeyNames="FileUri" runat="server"
                OnRowCommand
="RowCommandHandler">
                
<Columns>
                    
<asp:ButtonField Text="Delete" CommandName="DeleteItem" />
                    
<asp:HyperLinkField HeaderText="Link" DataTextField="FileName" DataNavigateUrlFields="FileUri" />
                    
<asp:BoundField DataField="CreatorName" HeaderText="Created by" />
                    
<asp:BoundField DataField="FolderName" HeaderText="FolderName" />
                    
<asp:BoundField DataField="IsReadOnly" HeaderText="IsReadOnly" />
                    
<asp:BoundField DataField="IsExists" HeaderText="IsExists" />
                    
<asp:BoundField DataField="FullFileName" HeaderText="FullFileName" />
                    
<asp:BoundField DataField="ExtendName" HeaderText="ExtendName" />
                    
<asp:BoundField DataField="CreateTime" HeaderText="CreateTime" />
                
</Columns>
            
</asp:GridView>
        
</div>
    
</div>
    
</form>

       下面就是本案例中最重要的核心代码了。

  打开defau.aspx.cs文件,添加如下代码:

  添加引用:

using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;

       添加代码:

private CloudBlobClient _BlobClient = null;
        
private CloudBlobContainer _BlobContainer = null;
        
private const string conContainerAddress = "imagefiles";
        
private const string conConfigStorageSetting = "BlobConnectionString";

        protected void Page_Load(
object sender, EventArgs e)
        {
            
//设置Windows Azure Storage连接
            var storageAccount
= CloudStorageAccount.FromConfigurationSetting(conConfigStorageSetting);
            _BlobClient
= storageAccount.CreateCloudBlobClient();

            
//获取或创建container
            _BlobContainer
= _BlobClient.GetContainerReference(conContainerAddress);
            _BlobContainer.CreateIfNotExist();

            
//设置权限
            var permissions
= new BlobContainerPermissions();
            permissions.PublicAccess
= BlobContainerPublicAccessType.Container;
            _BlobContainer.SetPermissions(permissions);

            
//显示当前列表
            DisplayFileList();

         在这里我们定义了常量conContainerAddress,它表示我们将要创建的Blob Container名称,注意在这里设置的时候一定要全部使用小写字母,如果使用匈牙利命名法,可能会出现错误。

  在这里初始化了Blob信息,主要是设置了Windows Azure Storage连接的账户、Blob Container的名称。

/// <summary>
        
/// 列表
        
/// </summary>
        
private void DisplayFileList()
        {
            var blobs
= _BlobContainer.ListBlobs();
            var filesList
= new List<ImageEntity>();

            
//查询
            foreach (var blobItem in blobs)
            {
                var cloudBlob
= _BlobContainer.GetBlobReference(blobItem.Uri.ToString());
                cloudBlob.FetchAttributes();
                
//实体字段
                filesList.Add(
new ImageEntity()
                {
                    FileUri
= blobItem.Uri,
                    FileName
= cloudBlob.Metadata["FileName"],
                    Length
= long.Parse(cloudBlob.Metadata["Length"]),
                    FolderName
= cloudBlob.Metadata["FileName"],
                    IsReadOnly
= bool.Parse(cloudBlob.Metadata["IsReadOnly"]),
                    IsExists
= bool.Parse(cloudBlob.Metadata["IsExists"]),
                    FullFileName
= cloudBlob.Metadata["FullFileName"],
                    ExtendName
= cloudBlob.Metadata["ExtendName"],
                    CreatorName
= cloudBlob.Metadata["CreatorName"],
                    CreateTime
= DateTime.Parse(cloudBlob.Metadata["CreateTime"])
                });
            }
            
//绑定列表
            fileView.DataSource
= filesList;
            fileView.DataBind();
        }

 

0
相关文章