首页 > 技术文章 > C# Azure 存储-Blob

alunchen 2016-08-13 14:46 原文

1. 前言

本文是根据Azure文档与本人做了验证之后写的。

如果想下载微软官网的demo, 请前往github https://github.com/Azure-Samples/storage-blob-dotnet-getting-started

 

2. 介绍

Azure Blob是存储很大空间的服务,能允许存储与访问通过http或https。Blob是有公有与私有的属性。公有是所有人可以看到的链接,私有是要通过秘钥等才可以访问到资源。

blob可以存储:

1)images或document指向一个文件夹

2)保存文件

3)视频与音频

4)存储数据的备份和恢复、灾难恢复和归档

5)由一个本地存储数据进行分析或azure托管服务

 

3. 概念

1)Container容器:

一个容器可以包含很多个blobs,一个账号可以包含很多个containers容器。请注意容器名字要为小写。

2)Blob:

blob是一个文件的属性与大小。Azure存储的blobs包含三种类型:block blobs、page blobs、append blobs。

  Block blobs:存储的是text与二进制文件,例如documents与媒体类型文件。

  Append blobs:是类似于Block blobs,但是它是做了优化的操作,所以它是用于logging的操作。一个简单的block blob或者 append blob 可以包含5000个blocks,最大每个文件4MB,整个大小最大为194GB(4MB*50000)

  Page blobs:最大为1TB,是可以读写的操作。

 

4. 代码开始

1)创建存储账户

关于创建存储的步骤,请参照

http://www.cnblogs.com/alunchen/p/5765700.html

中的第3大点

 

2)导入包,在包管理器上面分别输入下面的命令:

Install-Package WindowsAzure.Storage

Install-Package Microsoft.WindowsAzure.ConfigurationManager

 

2)建立连接

              string connStr = "DefaultEndpointsProtocol=https;AccountName=ceslighttest;AccountKey=cp3JXYFXu6XhV18oVQW2q7urHOhxhm9Guwl6uElTBWd9nxxxxxxxxxxxxxx;EndpointSuffix=core.chinacloudapi.cn";
                //建立连接
                CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connStr);
               CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

 

3)创建容器

             // 创建容器,是否存在
                CloudBlobContainer container = blobClient.GetContainerReference("testuimageblobcontainercompanyname");
              container.CreateIfNotExists();

 

4)设置权限

容器默认是private的,意思是要指定key才能下载图片。如果要把图片设置成对外哪里都可以下载,请设置成public

                //容器默认是private的,意思是要指定key才能下载图片。如果要把图片设置成对外哪里都可以下载,请设置成public
                container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });

 

5)创建文件,并上传本地文件

             // 创建文件名,如果有相同的文件名,则替换
                CloudBlockBlob blockBlob = container.GetBlockBlobReference("23.jpg");

                //上传本地文件
                using (var fileStream = System.IO.File.OpenRead(@"E:\23.jpg"))
                {
                    blockBlob.UploadFromStream(fileStream);
                }

 

6)show全部在容器里面的blobs文件

               // 输出文件大小与路径uri
                foreach (IListBlobItem item in container.ListBlobs(null, false))
                {
                    if (item.GetType() == typeof(CloudBlockBlob))
                    {
                        CloudBlockBlob blob = (CloudBlockBlob)item;

                        r += string.Format("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri);

                    }
                    else if (item.GetType() == typeof(CloudPageBlob))
                    {
                        CloudPageBlob pageBlob = (CloudPageBlob)item;

                        r += string.Format("Page blob of length {0}: {1}", pageBlob.Properties.Length, pageBlob.Uri);

                    }
                    else if (item.GetType() == typeof(CloudBlobDirectory))
                    {
                        CloudBlobDirectory directory = (CloudBlobDirectory)item;

                        r += string.Format("Directory: {0}", directory.Uri);
                    }
                }

 

7)删除blobs

               CloudBlockBlob blockBlob = container.GetBlockBlobReference("23.jpg");

                //删除blob
                blockBlob.Delete();

推荐阅读