**快速入门** ############################# 使用S3 CPP SDK前,您可以先参照 `API 手册 <../api/basicConcept.html>`_ 熟悉NOS的基本概念,如Bucket、Object、EndPoint、AccessKeyId和AccessKeySecret等。 本节您将看到如何快速的使用S3 CPP 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& 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 手册 对象 <../api/basicConcept.html#id2>`_ 2. 更多的上传文件信息,请参见 `S3-CPP-SDK 上传文件 <./uploadobject.html>`_ 下载文件 ------------------------------ 上传对象成功之后,您可以读取它的内容,以下代码可以实现文件的下载:: 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 下载文件 <./downloadobject.html>`_ 列举文件 ------------------------------ 当上传文件成功之后,可以查看桶中包含的文件列表,以下代码展示如何列举桶内的文件:: 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 文件管理 <./managerobject.html>`_ 删除文件 ------------------------------ 文件上传成功后,可以指定删除桶中的文件,以下代码实现桶中文件的删除:: 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; } }