技术开发 频道

细节见差别!从构架谈AzureTable开发

  类别代码编写完成后,编译没有错误的话,就可以编写Web Role(用户UI层)的代码了,设计好Default页面的功能后,本案例中,放置了一个上传图片的控件,两个文本框,分部用来填写图片名称和创建者,一个上传的按钮,点击按钮,上传图片到Blob中,同时把数据存储到Windows Azure Table中,上传按钮的代码如下:

/// <summary>
        
/// 上传图片
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            
//获取扩展名
            string extension
= System.IO.Path.GetExtension(fileUploadControl.FileName);
            DirectoryInfo di
= new DirectoryInfo(string.Format("{0}\\", conContainerAddress));
            FileInfo
file = new FileInfo(fileUploadControl.PostedFile.FileName);
            
//创建Blob并重命名
            
var blob = _BlobContainer.GetBlobReference(Guid.NewGuid().ToString() + extension);
            blob.UploadFromStream(fileUploadControl.FileContent);

            
//设置元数据到Blob
            blob.Metadata
["FileName"] = txtFileName.Text;
            blob.Metadata
["Length"] = fileUploadControl.FileContent.Length.ToString();
            blob.Metadata
["FolderName"] = di.Name;
            blob.Metadata
["IsReadOnly"] = file.IsReadOnly.ToString();
            blob.Metadata
["IsExists"] = file.Exists.ToString();
            blob.Metadata
["FullFileName"] = file.FullName;
            blob.Metadata
["ExtendName"] = file.Extension;//extension
            blob.Metadata
["CreatorName"] = txtCreator.Text;
            blob.Metadata
["CreateTime"] = DateTime.Now.ToShortTimeString();

            blob.SetMetadata();

            
//设置属性
            blob.Properties.ContentType
= fileUploadControl.PostedFile.ContentType;
            blob.SetProperties();

            
//存入Table实体数据
            StorageTable
table = new StorageTable();
            
table.Add(new ImageEntity
            {
                CreateTime
= DateTime.Now,
                ExtendName
= file.Extension,
                CreatorName
= txtCreator.Text,
                FileName
= file.Name,
                FileUri
=blob.Uri,
                FolderName
= di.Name,
                FullFileName
= file.FullName,
                IsExists
= file.Exists,
                IsReadOnly
= file.IsReadOnly,
                RowKey
= file.Name
            }
            );
            
// Add message to queue
            StorageQueue queue
= new StorageQueue();
            queue.
Add(new CloudQueueMessage(blob.Uri.ToString() + "$" + file.Name));

            
//显示列表
            DisplayFileList();
            txtFileName.
Text = string.Empty;
            txtCreator.
Text = string.Empty;
            statusMessage.
Text = string.Empty;
        }

 

  Web Role的代码开发完成后,转向Worker Role工程,在这里添加Queue进程执行的类,本文的重点在于对Table的开发,因此就不详细讲解了。

0
相关文章