searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

将文件上传到S3的具体实现

2024-08-22 10:06:09
146
0

1.服务介绍

Simple Storage Service(S3)是一种对象存储服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档等。本文将介绍如何使用媒体存储工具将文件上传到S3中。

2.源代码准备

2.1.方式一

直接从 github 上 clone 源代码。

// Clone this repository with submodules
git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp

2.2.方式二

(1)若网络情况不佳,直接下载压缩包 xxx.zip。

(2)打开解压后的目录,找到 .gitmodules 文件,查看子模块的 URL。

(3)对于每个子模块,分别下载其 ZIP 文件,并解压到相应的子目录下。

(4)确保子模块的位置与 .gitmodules 文件中定义的一致。

3.环境依赖

源代码的编译安装依赖于一些相关库,如 openssl 和 curl 等,在安装前需准备相关环境。

// (示例)编译安装openssl-1.1.1
tar xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
mkdir build
cd build
../config zlib-dynamic shared
make
make install

// 若要覆盖系统中已安装的openssl则执行以下命令
// 更新系统链接
sudo ln -sf /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
sudo ln -sf /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
 
// 更新动态链接器缓存
sudo ldconfig
 
 
// (示例)编译安装curl-7.51.0
tar xzf curl-7.51.0.tar.gz
cd curl-7.51.0
mkdir build
cd build
mkdir install
../configure --prefix=$PWD/install --with-ssl --enable-static --disable-shared
make
make install

4.编译安装

相关环境依赖安装完成后,接下来即可进入源代码目录进行编译安装。

cd xxx
mkdir build
cd build
mkdir install
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$PWD/install -DBUILD_ONLY="s3" -DENABLE_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DUSE_OPENSSL=ON
make
make install

5.操作示例

void testSaveS3() {
    // 初始化 SDK
    SDKOptions options;
    // 设置日志记录器
    options.loggingOptions.logLevel = Utils::Logging::LogLevel::Debug;
    InitAPI(options);
 
    String bucketName = "your-bucket-name";
    std::string endPointTmp = "your-end-point";
    size_t pos = endPointTmp.find("//");
    if (pos != std::string::npos) {
        endPointTmp = endPointTmp.substr(pos + 2);
    }
    String endpoint = endPointTmp;
    String accessKeyId = "your-access-key";
    String secretKey = "your-secret-key";
    String fileName = "your-file-name";
    String s3Key = "your-s3-key";
 
    Client::ClientConfigurationInitValues values{true}; // 设置 shouldDisableIMDS=true 即禁用 IMDS 自动凭证检索
    S3::S3ClientConfiguration clientConfig(values);
    clientConfig.endpointOverride = endpoint;
    clientConfig.scheme = Http::Scheme::HTTP;
    clientConfig.verifySSL = false;
     
    // 创建凭证
    const Auth::AWSCredentials credentials(accessKeyId, secretKey);
 
    // 创建S3客户端
    S3::S3Client s3Client(credentials, nullptr, clientConfig);
 
    S3::Model::PutObjectRequest request;
    request.SetBucket(bucketName);
    request.SetKey(s3Key); // 唯一性,否则s3上传的文件会被覆盖
    std::shared_ptr<IOStream> inputData = MakeShared<FStream>("SampleAllocationTag", fileName.c_str(), std::ios_base::in | std::ios_base::binary);
    if (!*inputData) {
        ErrorL << "Unable to read file " << fileName;
        ShutdownAPI(options);
        return;
    }
    request.SetBody(inputData);
 
    S3::Model::PutObjectOutcome outcome = s3Client.PutObject(request);
    if (!outcome.IsSuccess()) {
        ErrorL << "Error: putObject: " << outcome.GetError().GetMessage();
    } else {
        DebugL << "Added object '" << s3Key << "' to bucket '" << bucketName << "'.";
    }
 
    // 关闭 SDK
    ShutdownAPI(options);
}
0条评论
0 / 1000
zhoux27
4文章数
0粉丝数
zhoux27
4 文章 | 0 粉丝
原创

将文件上传到S3的具体实现

2024-08-22 10:06:09
146
0

1.服务介绍

Simple Storage Service(S3)是一种对象存储服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档等。本文将介绍如何使用媒体存储工具将文件上传到S3中。

2.源代码准备

2.1.方式一

直接从 github 上 clone 源代码。

// Clone this repository with submodules
git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp

2.2.方式二

(1)若网络情况不佳,直接下载压缩包 xxx.zip。

(2)打开解压后的目录,找到 .gitmodules 文件,查看子模块的 URL。

(3)对于每个子模块,分别下载其 ZIP 文件,并解压到相应的子目录下。

(4)确保子模块的位置与 .gitmodules 文件中定义的一致。

3.环境依赖

源代码的编译安装依赖于一些相关库,如 openssl 和 curl 等,在安装前需准备相关环境。

// (示例)编译安装openssl-1.1.1
tar xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
mkdir build
cd build
../config zlib-dynamic shared
make
make install

// 若要覆盖系统中已安装的openssl则执行以下命令
// 更新系统链接
sudo ln -sf /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
sudo ln -sf /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
 
// 更新动态链接器缓存
sudo ldconfig
 
 
// (示例)编译安装curl-7.51.0
tar xzf curl-7.51.0.tar.gz
cd curl-7.51.0
mkdir build
cd build
mkdir install
../configure --prefix=$PWD/install --with-ssl --enable-static --disable-shared
make
make install

4.编译安装

相关环境依赖安装完成后,接下来即可进入源代码目录进行编译安装。

cd xxx
mkdir build
cd build
mkdir install
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$PWD/install -DBUILD_ONLY="s3" -DENABLE_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DUSE_OPENSSL=ON
make
make install

5.操作示例

void testSaveS3() {
    // 初始化 SDK
    SDKOptions options;
    // 设置日志记录器
    options.loggingOptions.logLevel = Utils::Logging::LogLevel::Debug;
    InitAPI(options);
 
    String bucketName = "your-bucket-name";
    std::string endPointTmp = "your-end-point";
    size_t pos = endPointTmp.find("//");
    if (pos != std::string::npos) {
        endPointTmp = endPointTmp.substr(pos + 2);
    }
    String endpoint = endPointTmp;
    String accessKeyId = "your-access-key";
    String secretKey = "your-secret-key";
    String fileName = "your-file-name";
    String s3Key = "your-s3-key";
 
    Client::ClientConfigurationInitValues values{true}; // 设置 shouldDisableIMDS=true 即禁用 IMDS 自动凭证检索
    S3::S3ClientConfiguration clientConfig(values);
    clientConfig.endpointOverride = endpoint;
    clientConfig.scheme = Http::Scheme::HTTP;
    clientConfig.verifySSL = false;
     
    // 创建凭证
    const Auth::AWSCredentials credentials(accessKeyId, secretKey);
 
    // 创建S3客户端
    S3::S3Client s3Client(credentials, nullptr, clientConfig);
 
    S3::Model::PutObjectRequest request;
    request.SetBucket(bucketName);
    request.SetKey(s3Key); // 唯一性,否则s3上传的文件会被覆盖
    std::shared_ptr<IOStream> inputData = MakeShared<FStream>("SampleAllocationTag", fileName.c_str(), std::ios_base::in | std::ios_base::binary);
    if (!*inputData) {
        ErrorL << "Unable to read file " << fileName;
        ShutdownAPI(options);
        return;
    }
    request.SetBody(inputData);
 
    S3::Model::PutObjectOutcome outcome = s3Client.PutObject(request);
    if (!outcome.IsSuccess()) {
        ErrorL << "Error: putObject: " << outcome.GetError().GetMessage();
    } else {
        DebugL << "Added object '" << s3Key << "' to bucket '" << bucketName << "'.";
    }
 
    // 关闭 SDK
    ShutdownAPI(options);
}
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0