使用AWS S3 SDK访问CSP

最近更新时间: 2026-06-30 15:06:00

简介

CSP 提供了 AWS S3 兼容的 API,因此当您的数据从 S3 迁移到 CSP 之后,只需要进行简单的配置修改,即可让您的客户端应用轻松兼容 CSP 服务。本文主要介绍不同开发平台的 S3 SDK 的适配步骤。在完成添加适配步骤后,您就可以使用 S3 SDK 的接口来访问 CSP 上的文件了。

准备工作

  1. 您已注册账号,并且从访问管理 > 云API密钥上获取了密钥 SecretID 与 SecretKey。
  2. 您已有一个集成了 S3 SDK,并能正常运行的客户端应用。

Java

下面以 AWS Java SDK 2.20.0 版本为例,介绍如何适配以便访问 CSP 服务。

1. 修改 AWS 配置和证书文件

说明:

下面以 Linux 为例,修改 AWS 配置和证书文件。

AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件

  • 在配置文件(文件位置是~/.aws/config)中添加以下配置信息:

    [default]  
    s3 =  
    addressing_style = virtual 
    
  • 在证书文件(文件位置是~/.aws/credentials)中配置密钥:

    [default]  
    aws_access_key_id = [CSP_SECRETID]  
    aws_secret_access_key = [CSP_SECRETKEY] 
    

2. 代码中设置 Endpoint

以存储桶所在地域是ap-region-jcctest-ops为例,代码示例如下:

S3Client s3 = S3Client.builder()
              .endpointOverride(URI.create("http://cos.ap-region-jcctest-ops.csp.yfm13.fsphere.cn"))
              .region(Region.of("ap-region-jcctest-ops"))
              .build();

Python

下面以 AWS Python SDK 1.9.205 版本为例,介绍如何适配以便访问 COS 服务。

1. 修改 AWS 配置和证书文件

说明:

下面以 Linux 为例,修改 AWS 配置和证书文件。

AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件

  • 在证书文件(文件位置是~/.aws/credentials)中配置密钥:

    [default]  
    aws_access_key_id = [CSP_SECRETID]  
    aws_secret_access_key = [CSP_SECRETKEY] 
    

2. 代码中设置 Endpoint

以存储桶所在地域是ap-region-jcctest-ops为例:

s3 = boto3.client(
    's3',
    region_name='ap-region-jcctest-ops',
    endpoint_url='http://cos.ap-region-jcctest-ops.csp.yfm13.fsphere.cn',
    verify=True,    # 是否验证证书 True/False/'/path/to/ca-bundle.crt'
    use_ssl=False   # 是否使用 SSL/TLS
)

Go

下面以 AWS Go SDK v1.55.6 版本为例,介绍如何适配以便访问 CSP 服务。

1. 修改 AWS 证书文件

  • 在证书文件(文件位置是~/.aws/credentials)中配置密钥:

    [default]  
    aws_access_key_id = [CSP_SECRETID]  
    aws_secret_access_key = [CSP_SECRETKEY] 
    

2. 简单的实例

package main

import (
    "fmt"
    "log"
    "os"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)

func main() {
    // 1. Create AWS session
    // Credentials are loaded from environment variables or ~/.aws/credentials
    region := "ap-region-jcctest-ops"
    endpoint := "http://cos.ap-region-jcctest-ops.csp.yfm13.fsphere.cn"

    sess, err := session.NewSession(&aws.Config{
        Region:   aws.String(region),
        Endpoint: &endpoint,
    })
    if err != nil {
        log.Fatal("Failed to create session:", err)
    }

    // 2. Create S3 service client
    svc := s3.New(sess)

    // 3. List all buckets
    fmt.Println("Listing buckets:")
    result, err := svc.ListBuckets(nil)
    if err != nil {
        log.Fatal("Failed to list buckets:", err)
    }

    for _, b := range result.Buckets {
        fmt.Printf("* %s created at %s\n",
            aws.StringValue(b.Name), aws.TimeValue(b.CreationDate))
    }

    // 4. Upload file to S3
    bucketName := "test-1255000327"             // Replace with your bucket name
    fileName := "/tmp/test.txt"                    // Local file name
    objectKey := "uploaded_test_by_aws_go_sdk.txt" // Object key in S3

    file, err := os.Open(fileName)
    if err != nil {
        log.Fatal("Failed to open file:", err)
    }
    defer file.Close()

    _, err = svc.PutObject(&s3.PutObjectInput{
        Bucket: aws.String(bucketName),
        Key:    aws.String(objectKey),
        Body:   file,
    })
    if err != nil {
        log.Fatal("Failed to upload file:", err)
    }
    fmt.Printf("Successfully uploaded file %s to %s/%s\n", fileName, bucketName, objectKey)

    // 5. Download file from S3
    downloadedFile := "downloaded_test.txt"
    out, err := os.Create(downloadedFile)
    if err != nil {
        log.Fatal("Failed to create download file:", err)
    }
    defer out.Close()

    result2, err := svc.GetObject(&s3.GetObjectInput{
        Bucket: aws.String(bucketName),
        Key:    aws.String(objectKey),
    })
    if err != nil {
        log.Fatal("Failed to download file:", err)
    }
    defer result2.Body.Close()

    _, err = out.ReadFrom(result2.Body)
    if err != nil {
        log.Fatal("Failed to save downloaded file:", err)
    }
    fmt.Printf("Successfully downloaded file %s/%s to %s\n", bucketName, objectKey, downloadedFile)
}

C++

下面以 AWS C++ SDK 1.7.68 版本为例,介绍如何适配以便访问 CSP 服务。

1. 修改 AWS 配置和证书文件

说明:

下面以 Linux 为例,修改 AWS 配置和证书文件。

AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件

  • 在配置文件(文件位置是~/.aws/config) 中添加以下配置:

    [default]  
    s3 =  
    addressing_style = virtual 
    
  • 在证书文件(文件位置是~/.aws/credentials)中配置密钥:

    [default]  
    aws_access_key_id = [CSP_SECRETID]  
    aws_secret_access_key = [CSP_SECRETKEY] 
    

2. 代码中设置 Endpoint

以存储桶所在地域是ap-region-jcctest-ops为例,代码示例如下:

Aws::Client::ClientConfiguration awsCC;
awsCC.scheme = Aws::Http::Scheme::HTTP;
awsCC.region = "ap-region-jcctest-ops";
awsCC.endpointOverride = "cos.ap-region-jcctest-ops.csp.yfm13.fsphere.cn"; 
Aws::S3::S3Client s3_client(awsCC);