• 使用百度云 BOS 和 C# SDK 开发数据存储


    Ø  简介

    本文主要介绍如何使用百度云的 C# SDK 操作 BOS(Baidu Object Storage/百度对象存储),以及常见问题和解决办法。本文将以以下几点展开学习:

    1.   基本介绍

    2.   创建 BaiduBce.Services.Bos.BosClient 对象

    3.   获取 Bucket 集合

    4.   获取指定 Bucket 中的所有 ObjectKey

    5.   上传对象(文件)

    6.   下载对象(文件)

    7.   常见问题及解决办法

     

    1.   基本介绍

    1)   什么是 BOS?

    BOSBaidu Object Storage/百度对象存储)提供稳定、安全、高效以及高扩展存储服务,支持单文件最大5TB的文本、多媒体、二进制等任何类型的数据存储。简单的说,就是可以将文件存储至白云的服务器中,并提供了上传、下载等机制的一个平台。更多介绍核心概念

     

    2)   什么是 C# SDK?

    SDKSoftware Development Kit/软件开发工具包)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。就是根据软件体现设计出来了软件开发包,可以使用这个软件开发包快速的开发,具有快速、简单、高效等优点。一个完整的 SDK 应该具有不同语言或平台,这样才能应用于各种平台,本文主要学习百度云 BOS C# SDK 的使用。

     

    3)   入门介绍

    1.   产品定价

    BOS 并不是一个完全免费的平台,收费标准可参考:按需计费 或者咨询百度云客服专员。刚开始试用两天,后面就会因为欠费停用 BOS

    2.   API 参考

    除了使用 SDK 工具包,另外可以使用 API 接口 来操作 BOS,但本文先不去讨论这一块的内容。

    3.   安装 SDK 工具包

    参考链接:安装 SDK 工具包

    4.   C# SDK 文档

    参考链接:快速入门

    5.   开发准备

    参考链接:开发准备

     

    2.   创建 BaiduBce.Services.Bos.BosClient 对象

    /// <summary>

    /// 创建 BaiduBce.Services.Bos.BosClient 对象。

    /// </summary>

    private static BosClient GenerateBosClient()

    {

        const string accessKeyId = "xxxxbba3f39d43799d29c130d40fxxxx";      //您的Access Key ID

        const string secretAccessKey = "xxxx1520394e4754943108720899xxxx";  //您的Secret Access Key

        /*

        * 北京区域:http://bj.bcebos.com

            * 广州区域:http://gz.bcebos.com

            * 苏州区域:http://su.bcebos.com

            */

        const string endpoint = "http://bj.bcebos.com";     //指定BOS服务域名

     

        BceClientConfiguration config = new BceClientConfiguration();

        config.Credentials = new DefaultBceCredentials(accessKeyId, secretAccessKey);

        config.Endpoint = endpoint;

     

        return new BosClient(config);

    }

    1)   注意:将要操作的 Bucket 必须与所属区域地址对应。

    2)   更多:参考API

     

    3.   获取 Bucket 集合

    /// <summary>

    /// 获取 Bucket 集合。

    /// </summary>

    public static void GetBuckets()

    {

        BosClient client = GenerateBosClient();

        List<BucketSummary> buckets = client.ListBuckets().Buckets;

        foreach (BucketSummary bucket in buckets)

        {

            Console.WriteLine(bucket.Name);

        }

    }

    1)   运行结果(创建的两个Bucket):

    bjbosdata

    gzbosdata

    2)   更多:参考API

     

    4.   获取指定 Bucket 中的所有 ObjectKey

    /// <summary>

    /// 获取指定 Bucket 中的所有 ObjectKey.

    /// </summary>

    public static void GetObjectKeys()

    {

        BosClient client = GenerateBosClient();

        ListObjectsResponse listObjectsResponse = client.ListObjects("bjbosdata");

        foreach (BosObjectSummary objectSummary in listObjectsResponse.Contents)

        {

            Console.WriteLine("ObjectKey: " + objectSummary.Key);

        }

    }

    1)   运行结果:

    ObjectKey: default_files/

    ObjectKey: default_files/AspNetMVC4Setup_CHS.exe

     

    5.   上传对象(文件)

    /// <summary>

    /// 上传文件。

    /// </summary>

    public static void UploadFile()

    {

        string fileName = @"F:ToStudy其他开放平台百度云开放平台BosFilesAspNetMVC4Setup.exe";

        FileInfo file = new FileInfo(fileName);

     

        const string bucketName = "bjbosdata";  //Bucket名称

        const string objectKey = @"default_files/AspNetMVC4Setup.exe";  //指定object名称

     

        BosClient client = GenerateBosClient();

        //以文件形式上传Object

        PutObjectResponse putObjectFromFileResponse = client.PutObject(bucketName, objectKey, file);

     

        Console.WriteLine(putObjectFromFileResponse.ETAG);  //c71157d9b3a4105b2d3c5a968d0ced0a

    }

    更多(上传形式):参考API

     

    6.   下载对象(文件)

    /// <summary>

    /// 下载文件。

    /// </summary>

    public static void DownLoadFile()

    {

        string path = @"F:ToStudy其他开放平台百度云开放平台BosFiles";

        if (!Directory.Exists(path))

            Directory.CreateDirectory(path);

     

        const string bucketName = "bjbosdata";  //Bucket名称

        const string objectKey = @"default_files/AspNetMVC4Setup.exe";  //指定object名称

     

        BosClient client = GenerateBosClient();

        BosObject bosObject = client.GetObject(bucketName, objectKey);

        using (Stream objectStream = bosObject.ObjectContent)

        {

            //下载文件的存储路径

            string fileName = string.Format(@"{0}AspNetMVC4Setup_{1}.exe", path, DateTime.Now.Millisecond);

            using (FileStream fileStream = new FileInfo(fileName).OpenWrite())

            {

                byte[] buffer = new byte[2048];

                int count = 0;

                while ((count = objectStream.Read(buffer, 0, buffer.Length)) > 0)

                {

                    fileStream.Write(buffer, 0, count);

                }

            }

        }

    }

    更多:参考API

     

    7.   常见问题及解决办法

    1)   如何获取 Access Key ID Secret Access Key?

    1.   登录百度云

    2.   点击右侧的【安全中心】

    clip_image002[6]

     

    2)   You must active bos service. (Status Code: 403; Error Code: OptInRequired; Request ID: f07b81b4-70ed-4f36-a57f-adad6ab1e82c)

    1.   可能产生的异常代码:List<BucketSummary> buckets = client.ListBuckets().Buckets;

    2.   解决办法:

    1)   点击进入,左侧的【对象存储BOS

    clip_image003[6]

    2)   激活“BOS 服务”

     

    3)   The specified bucket is not valid. (Status Code: 400; Error Code: InvalidBucketName; Request ID: bc25b87b-1521-4031-86cb-cf623e1ae4de)

    1.   可能产生的异常代码:List<BucketSummary> buckets = client.ListBuckets().Buckets;

    2.   解决办法:

    1)   点击进入【Bucket管理】

    clip_image004[6]

    2)   新建Bucket

    clip_image006[6]

     

    4)   The specified key does not exist. (Status Code: 404; Error Code: NoSuchKey; Request ID: 53b5c8b9-3e9e-4850-b252-68bf9caaeb32)

    1.   可能产生的异常代码:BosObject bosObject = client.GetObject(bucketName, objectKey);

    2.   解决办法:

    1)   确认创建的 bucket 下的文件或者文件必须存在,例如:

    const string objectKey = @"default_files/AspNetMVC4Setup.exe";  //指定object名称

  • 相关阅读:
    2014第2周四部署环境&买火车票
    2014第2周三Web安全学习
    2014第2周二
    2014第2周一
    2013第一周日小结
    2013第1周六意外加班到很晚
    2014第一周五开发问题记URL传参乱码等
    XML文档形式&JAVA抽象类和接口的区别&拦截器过滤器区别
    通过WriteProcessMemory改写进程的内存
    【java】Windows7 下设置环境变量
  • 原文地址:https://www.cnblogs.com/abeam/p/10071046.html
Copyright © 2020-2023  润新知