- 产品文档
- > 存储与 CDN
- > 对象存储
- > AWS S3 兼容
- > AWS S3 SDK
- > S3 CPP SDK
- > 测试
快速入门
使用S3 C# SDK前,您可以先参照API 手册熟悉NOS的基本概念,如Bucket、Object、EndPoint、AccessKeyId和AccessKeySecret等。 本节您将看到如何快速的使用S3 C# SDK,完成常用的操作,上传文件、下载文件等。
常用类
常用类 | 备注 |
---|---|
S3Client | S3客户端类,用户通过S3Client调用服务 |
基本操作
上传文件
对象(Object)是NOS中最基本的数据单元,您可以把它简单的理解为文件,以下代码可以实现简单的对象上传:
void putObjectFromContent(const Aws::S3::S3Client& s3Client,const Aws::String& bucketName,const Aws::String& objectName,const std::shared_ptr<Aws::FStream>& input_data){
Aws::S3::Model::PutObjectRequest object_request;
object_request.WithBucket(bucketName).WithKey(objectName);
auto input_data = Aws::MakeShared("PutObjectInputStream",content);
object_request.SetBody(input_data);
auto put_object_outcome = s3Client.PutObject(object_request);
if (put_object_outcome.IsSuccess())
{
std::cout << "Done!" << std::endl;
}
else
{
std::cout << "PutObject error: " <<
put_object_outcome.GetError().GetExceptionName() << " " <<
put_object_outcome.GetError().GetMessage() << std::endl;
}
}
//如果是指定文件名的上传方式,那么input_data通过这种方式构建,第一个参数只是个flag,随便穿即可
auto input = Aws::MakeShared("test",file_name.c_str(), std::ios_base::in | std::ios_base::binary);
Attention
1.对象命名规则请参见API 手册 对象 2.更多的上传文件信息,请参见 S3-CPP-SDK 上传文件
下载文件
上传对象成功之后,您可以读取它的内容,以下代码可以实现文件的下载:
void downloadObject(const Aws::S3::S3Client& s3Client,const Aws::String& bucketName,const Aws::String& objectName,const Aws::String& saveName){
Aws::S3::Model::GetObjectRequest object_request;
object_request.WithBucket(bucketName).WithKey(objectName);
auto get_object_outcome = s3Client.GetObject(object_request);
if (get_object_outcome.IsSuccess())
{
Aws::OFStream local_file;
local_file.open(saveName.c_str(), std::ios::out | std::ios::binary);
local_file << get_object_outcome.GetResult().GetBody().rdbuf();
std::cout << "Done!" << std::endl;
}
else
{
std::cout << "GetObject error: " <<
get_object_outcome.GetError().GetExceptionName() << " " <<
get_object_outcome.GetError().GetMessage() << std::endl;
}
}
更多的下载文件信息,请参见 S3 CPP SDK 下载文件
列举文件
当上传文件成功之后,可以查看桶中包含的文件列表,以下代码展示如何列举桶内的文件:
void listObjectsWithPrintKeySize(const Aws::S3::S3Client& s3Client,const Aws::String& bucketName){
Aws::S3::Model::ListObjectsRequest listObjectRequest;
listObjectRequest.WithBucket(bucketName);
auto result = s3Client.ListObjects(listObjectRequest);
if (result.IsSuccess()) {
for(auto content : result.GetResult().GetContents()){
std::cout << content.GetKey() << " --> " << content.GetSize() << std::endl;
}
} else {
std::cout << "list Objects failed" << std::endl;
}
}
Note
1.上面的代码默认列举100个object
更多的管理文件信息,请参见 S3 CPP SDK 文件管理
删除文件
文件上传成功后,可以指定删除桶中的文件,以下代码实现桶中文件的删除:
void deleteObject(const Aws::S3::S3Client& s3Client,const Aws::String& bucketName,const Aws::String& objectName){
Aws::S3::Model::DeleteObjectRequest object_request;
object_request.WithBucket(bucketName).WithKey(objectName);
auto delete_object_outcome = s3Client.DeleteObject(object_request);
if (delete_object_outcome.IsSuccess())
{
std::cout << "Done!" << std::endl;
}
else
{
std::cout << "DeleteObject error: " <<
delete_object_outcome.GetError().GetExceptionName() << " " <<
delete_object_outcome.GetError().GetMessage() << std::endl;
}
}
返回结果处理
S3 提供的所有接口都是有返回值的,且可以通过IsSuccess()方法查看操作是否执行成功
例如:
void deleteObject(const Aws::S3::S3Client& s3Client,const Aws::String& bucketName,const Aws::String& objectName){
Aws::S3::Model::DeleteObjectRequest object_request;
object_request.WithBucket(bucketName).WithKey(objectName);
auto delete_object_outcome = s3Client.DeleteObject(object_request);
if (delete_object_outcome.IsSuccess())
{
std::cout << "Done!" << std::endl;
}
else
{
std::cout << "DeleteObject error: " <<
delete_object_outcome.GetError().GetExceptionName() << " " <<
delete_object_outcome.GetError().GetMessage() << std::endl;
}
}