zoukankan      html  css  js  c++  java
  • C# Azure 存储-Blob

    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();
  • 相关阅读:
    也谈用反射实现Enum→String映射:一种重视性能的方法【转载】
    C#对象的浅拷贝,深拷贝【转载】
    int转byte[],byte[]转int
    TF31003:您的用户帐户没有连接到 Team Foundation Server 的权限
    关于枚举的双语显示问题
    浅析C#深拷贝与浅拷贝
    反射枚举变量
    C#路径/文件/目录/I/O常见操作汇总(二)
    【转】正确理解ThreadLocal
    【转】JSP的九个隐含对象
  • 原文地址:https://www.cnblogs.com/alunchen/p/5767984.html
Copyright © 2011-2022 走看看