使用百度云 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?
BOS(Baidu Object Storage/百度对象存储)提供稳定、安全、高效以及高扩展存储服务,支持单文件最大5TB的文本、多媒体、二进制等任何类型的数据存储。简单的说,就是可以将文件存储至白云的服务器中,并提供了上传、下载等机制的一个平台。更多介绍、核心概念。
2) 什么是 C# SDK?
SDK(Software 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\其他\开放平台\百度云开放平台\BosFiles\AspNetMVC4Setup.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. 点击右侧的【安全中心】

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】

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管理】

2) 新建Bucket

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名称
使用百度云 BOS 和 C# SDK 开发数据存储的更多相关文章
- IOS开发数据存储篇—IOS中的几种数据存储方式
IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09 421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都 ...
- 关于Android开发数据存储的方式(一)
关于Android开发数据存储方式(一) 在厦门做Android开发也有两个月了,快情人节了.我还在弄代码. 在微信平台上开发自己的APP,用到了数据存储的知识,如今总结一下: 整体的来讲.数据存储方 ...
- android 开发-数据存储之文件存储
android的文件存储是通过android的文件系统对数据进行临时的保存操作,并不是持久化数据,例如网络上下载某些图片.音频.视频文件等.如缓存文件将会在清理应用缓存的时候被清除,或者是应用卸载的时 ...
- Android开发--数据存储之数据库操作
简介: SQLite 的介绍: SQLite数据库属于文本型的数据库,它是以文本的形式来保存的.Android提供了对 SQLite 数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据 ...
- Android开发--数据存储之File文件存储
转载来自:http://blog.csdn.net/ahuier/article/details/10364757,并进行扩充 引言:Android开发中的数据存储方式 Android提供了5种方式存 ...
- Android开发数据存储之ContentProvider详解
转载:十二.ContentProvider和Uri详解 一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可 ...
- Android应用开发-数据存储和界面展现(二)(重制版)
SQLite数据库 // 自定义类MyOpenHelper继承自SQLiteOpenHelper MyOpenHelper oh = new MyOpenHelper(getContext(), &q ...
- Android应用开发-数据存储和界面展现(一)(重制版)
常见布局 相对布局(RelativeLayout) 相对布局下控件默认位置都是左上角(左对齐.顶部对齐父元素),控件之间可以重叠 可以相对于父元素上下左右对齐,相对于父元素水平居中.竖直居中.水平竖直 ...
- Android应用开发-数据存储和界面展现(二)
SQLite数据库 // 自定义类MyOpenHelper继承自SQLiteOpenHelper MyOpenHelper oh = new MyOpenHelper(getContext(), &q ...
随机推荐
- win7下怎么安装IIS
工具/原料 win7旗舰版系统 笔记本一台 WIN7下怎么安装iis教程: 点击开始→控制面板,然后再点击程序和功能,勿点击卸载程序,否则到不了目标系统界面. 然后在程序和功能下面,点击打开和关闭wi ...
- HTML基础-------最初概念以及相关语法
HTML概念以及相关语法 HTML HTML是一种类似于(c,java,c++)之类的语言,他是用来描述网页的一种语言.通过各种标签所代表的语义来构建出一个网页,再通过浏览器的渲染功能来实现该网页的各 ...
- Synchronized的基本知识、实现原理以及其与ReentrantLock的区别
一.synchronized知识 在谈论synchronized之前,我们需要了解线程安全问题的主要诱因.线程安全问题的主要诱因如下: 存在共享数据(也称为临界资源) 存在多条线程共同操作这些共享数据 ...
- 什么是 CI/CD?
什么是 CI/CD? 在软件开发中经常会提到持续集成Continuous Integration(CI)和持续交付Continuous Delivery(CD)这几个术语.但它们真正的意思是什么呢? ...
- 给MongoDB添加索引
用过数据库的都知道,数据库索引与书籍的索引类似,都是用来帮助快速查找的. MongoDB的索引跟关系型数据库的索引几乎一致. 1. 索引的创建 mongodb采用ensureInd ...
- AtCoder Grand Contest 032 A - Limited Insertion( 思维)
Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400400 points Problem Statement Snuke has an empty ...
- 虚拟机网络连接方式导致的p地址为10.0.2.*的问题
全世界都知道通过 ifconfig 命令查看本机ip地址,我当然希望安装的虚拟机和当前局域网的其他机器一样内网ip为192.168.1.*,如下图所示: 而当我执行该命令时,实际情况却是这样的: 解决 ...
- 关于echarts.js 柱形图
echarts.js官网: http://www.echartsjs.com/index.html 这是我所见整理最详细echarts.js 柱形图博客: https://blog.csdn.net/ ...
- h5手机查看
1.装个node:2.全局装个anywhere的npm包.(npm i -g anywhere)3.大功告成,现在到任意目录下用命令行执行anywhere就可以:(-p 参数可以设置启动端口) 补充: ...
- Maven常用命令汇总
1.单独构建多模块项目中的某个模块 mvn clean package -pl 模块名 2.跳过测试代码直接打包 mvn install -DskipTests