您的位置:首页 > 其它

Azure学习笔记:Storage(3)

2014-03-18 09:46 351 查看
Azure的Storage为我们提供了三种类型的存储结构:Blob类型,Table类型,Queue类型。Blob类型的存储结构非常适合储存文件资料,例如图片或者是文档什么的。Table类型的结构和传统的关系数据库系统中的Table还是有比较大的差别,这里的Table更像C#中的锯齿数组:每行的列都可以自由定制,非常方便。
Blob
在使用Blob的时候,我们需要先创建一个Container,Container有公有和私有之分。它们的功能故名思意都是用来做访问控制的。下面的代码片段演示怎么在Client端调将文件上传至Azure的Blob上。
Common
private string storageConnStr = @"DefaultEndpointsProtocol=https;AccountName=ghstorage01;AccountKey=MM2FlgiOMSEpgtcJr65l6/0evAgT8ulIJCVfXAJva7jsFj1Tj6TbN2Imh1/xkhcToeMS64X6DbSRthRGs9IBuw==";
        private CloudStorageAccount storageAccount;


Upload
private void button1_Click(object sender, EventArgs e)
        {
            storageAccount = CloudStorageAccount.Parse(storageConnStr);
            //storageAccount = CloudStorageAccount.DevelopmentStorageAccount;

            CloudBlobClient client = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer container = client.GetContainerReference("pcontainer01");
            container.CreateIfNotExists();

            CloudBlockBlob blob = container.GetBlockBlobReference(textBox1.Text);
            FileStream fs = File.OpenRead(textBox1.Text);
            blob.UploadFromStream(fs);
            fs.Close();
            MessageBox.Show("done");

        }


Download
private void button2_Click(object sender, EventArgs e)
        {
            storageAccount = CloudStorageAccount.Parse(storageConnStr);
            CloudBlobClient client= storageAccount.CreateCloudBlobClient();
            CloudBlobContainer container = client.GetContainerReference("pcontainer01");
            Uri fileUri = new Uri(@"http://ghstorage01.blob.core.windows.net/pcontainer01/C:/Users/v-jexion/Pictures/email/20140103-153640-0001.png");
            CloudBlockBlob blockBlob = new CloudBlockBlob(fileUri, new StorageCredentials(storageConnStr));

            blockBlob.DownloadToFile(@"d:\tmp.jpg", FileMode.Create);
            
            

        }


Delete
private void button3_Click(object sender, EventArgs e)
        {
            storageAccount = CloudStorageAccount.Parse(storageConnStr);
            CloudBlobClient client = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer container = client.GetContainerReference("pcontainer01");
            var blob=container.GetBlockBlobReference("C:/Users/v-jexion/Pictures/email/20140103-153640-0001.png");
            blob.Delete();

        }


Table
在之前已经介绍过Azure上的Table,在这里它更像是一个对象池,用来保存不同的对象。下面贴一个简单使用它的小例子:使用Azure Table保存员工的信息,并将它绑定到数据呈递控件。
Common
private string accountConnectionString = @"DefaultEndpointsProtocol=https;AccountName=ghstorage01;AccountKey=MM7FlgiOMSEpgtcJr65l6/0evAgT8ulIJCVfXAJva7jsFj1Tj6TbN2Imh1/xkhcToeMS64X6DbSRthRGs9IBuw==";
        CloudStorageAccount account;
 public class EmployeeEntity : TableEntity
        {
            public EmployeeEntity() { }

            public EmployeeEntity(string city, string id)
            {
                this.PartitionKey = city;
                this.RowKey = id;
            }

            public string Name { get; set; }

            public int Age { get; set; }
      
            public string Country { get; set; }
        }


Create Table
private void btnCreateTable_Click(object sender, EventArgs e)
        {
            account = CloudStorageAccount.Parse(accountConnectionString);
            CloudTableClient client=account.CreateCloudTableClient();
            CloudTable table=client.GetTableReference("Employees");
            table.CreateIfNotExists();

            EmployeeEntity e1=new EmployeeEntity("Beijin","101"){ Name="jeff", Age=27};

            TableOperation insertOpt=TableOperation.Insert(e1);
            table.Execute(insertOpt);
            MessageBox.Show("done");

        }


Query Table
private void btnQuery_Click(object sender, EventArgs e)
        {
            account = CloudStorageAccount.Parse(accountConnectionString);
            CloudTableClient client = account.CreateCloudTableClient();
            CloudTable table = client.GetTableReference("Employees");
            table.CreateIfNotExists();

            TableQuery<EmployeeEntity> t = new TableQuery<EmployeeEntity>();
            var result = t.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Beijin"));
            var list = table.ExecuteQuery(result).ToList();
            dataGridView1.DataSource = list;
            
        }


Update Item
private void btnUptdate_Click(object sender, EventArgs e)
        {
            account = CloudStorageAccount.Parse(accountConnectionString);
            CloudTableClient client = account.CreateCloudTableClient();
            CloudTable table = client.GetTableReference("Employees");
            table.CreateIfNotExists();

            TableQuery<EmployeeEntity> t = new TableQuery<EmployeeEntity>();
            var result = t.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Beijin"));
            var item = table.ExecuteQuery(result).FirstOrDefault();

            if (item != null)
            {
                item.Name += DateTime.Now.ToShortDateString();
                TableOperation o = TableOperation.Merge(item);
                table.Execute(o);
            }
        }


Delete Item
private void btnDelete_Click(object sender, EventArgs e)
        {
            account = CloudStorageAccount.Parse(accountConnectionString);
            CloudTableClient client = account.CreateCloudTableClient();
            CloudTable table = client.GetTableReference("Employees");
            table.CreateIfNotExists();

            TableQuery<EmployeeEntity> t = new TableQuery<EmployeeEntity>();
            var result = t.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Beijin"));
            var item = table.ExecuteQuery(result).FirstOrDefault();

            if (item != null)
            {
                TableOperation o = TableOperation.Delete(item);
                table.Execute(o);
            }
        }


Queue
队列,这里的队列是从数据存储的意义上去定义的,也就是队列类型的数据结构。用户可以使用这种数据结构来处理特殊的业务场景,比如日常任务队列,异常信息队列等等。
cloudAcc = CloudStorageAccount.Parse(storageConnStr);
            CloudQueueClient queueClient = cloudAcc.CreateCloudQueueClient();
            
            //create queue
            CloudQueue queue = queueClient.GetQueueReference("ghstorage01"); // new CloudQueue(new Uri("http://ghstorage01.queue.core.windows.net/"));
            queue.CreateIfNotExists();

            //enqueue
            if (queue != null)
            { 
                CloudQueueMessage msg=new CloudQueueMessage("hello storage queue");
       
                queue.AddMessage(msg);
                
                
            }

            //dequeue
            CloudQueueMessage msg2 = queue.GetMessage();
            if (msg2 != null)
            {
                MessageBox.Show(msg2.AsString);
            }


Azure Storage Explorer
该工具是款开源的辅助工具,用它可以浏览Azure Storage上保存的数据,是款不错的UI工具。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: