类别代码编写完成后,编译没有错误的话,就可以编写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;
}
/// 上传图片
/// </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的开发,因此就不详细讲解了。