二、准备工作
1. 你已 注册腾讯云账号,并且从 访问管理控制台 上获取了腾讯云密钥 SecretID 与 SecretKey。
2. 你已有一个集成了 S3 SDK,并能正常运行的客户端应用。
三、Android
下面以 AWS Android SDK 2.14.2版本为例,介绍如何适配以便访问 COS 服务。对于终端访问 COS,将永久密钥放到客户端代码中有极大的泄露风险,我们建议你接入 STS 服务获取临时密钥,详情请参见 临时密钥生成及使用指引。
四、初始化
初始化实例时,你需要设置临时密钥提供者和 Endpoint,以存储桶所在地域是ap-guangzhou为例:
AmazonS3Client s3 = new AmazonS3Client(new AWSCredentialsProvider() { @Override public AWSCredentials getCredentials() { // 这里后台请求 STS 得到临时密钥信息 return new BasicSessionCredentials( "<TempSecretID>", "<TempSecretKey>", "<STSSessionToken>" ); } @Override public void refresh() { // }});s3.setEndpoint("cos.ap-guangzhou.myqcloud.com");
五、iOS
以 AWS iOS SDK 2.10.2版本为例,介绍如何适配以便访问 COS 服务。对于终端访问 COS,将永久密钥放到客户端代码中有极大的泄露风险,我们建议你接入 STS 服务获取临时密钥,详情请参见 临时密钥生成及使用指引。
六、1. 实现 AWS CredentialsProvider 协议
-(AWSTask<AWSCredentials *> *)credentials{ // 这里后台请求 STS 得到临时密钥信息 AWSCredentials *credential = [[AWSCredentials alloc]initWithAccessKey:@"<TempSecretID>" secretKey:@"<TempSecretKey>" sessionKey:@"<STSSessionToken>" expiration:[NSDate dateWithTimeIntervalSince1970:1565770577]]; return [AWSTask taskWithResult:credential];}- (void)invalidateCachedTemporaryCredentials{}
七、2. 提供临时密钥提供者和 Endpoint
以存储桶所在地域是ap-guangzhou为例:
NSURL* bucketURL = [NSURL URLWithString:@"https://cos.ap-guangzhou.myqcloud.com"];AWSEndpoint* endpoint = [[AWSEndpoint alloc] initWithRegion:AWSRegionUnknown service:AWSServiceS3 URL:bucketURL];AWSServiceConfiguration* configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast2 endpoint:endpoint credentialsProvider:[MyCredentialProvider new]]; // MyCredentialProvider 实现了 AWSCredentialsProvider 协议[[AWSServiceManager defaultServiceManager] setDefaultServiceConfiguration:configuration];
八、Node.js
下面以 AWS JS SDK 2.509.0版本为例,介绍如何适配以便访问 COS 服务。
九、初始化
初始化实例时设置腾讯云密钥和 Endpoint,以存储桶所在地域是ap-guangzhou为例,代码示例如下:
var AWS = require('aws-sdk');AWS.config.update({ accessKeyId: "COS_SECRETID", secretAccessKey: "COS_SECRETKEY", region: "ap-guangzhou", endpoint: 'https://cos.ap-guangzhou.myqcloud.com',});s3 = new AWS.S3({apiVersion: '2006-03-01'});
十、Java
下面以 AWS Java SDK 1.11.609版本为例,介绍如何适配以便访问 COS 服务。
十一、1. 修改 AWS 配置和证书文件
注意:说明:
注意:下面以 Linux 为例,修改 AWS 配置和证书文件。
AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件。
·在配置文件(文件位置是~/.aws/config)中添加以下配置信息:
[default] s3 = addressing_style = virtual
·在证书文件(文件位置是~/.aws/credentials)中配置腾讯云的密钥:
[default] aws_access_key_id = [COS_SECRETID] aws_secret_access_key = [COS_SECRETKEY]
十二、2. 代码中设置 Endpoint
·以存储桶所在地域是ap-guangzhou为例,代码示例如下:
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration( "http://cos.ap-guangzhou.myqcloud.com", "ap-guangzhou")) .build();
·如果你是使用 V2版本的 AWS Java SDK,代码示例如下:
S3Client s3Client = S3Client.builder() .endpointOverride(URI.create("http://cos.ap-guangzhou.myqcloud.com")) .region(Region.of("ap-guangzhou")) .build();
十三、Python
下面以 AWS Python SDK 1.9.205版本为例,介绍如何适配以便访问 COS 服务。
十四、1. 修改 AWS 配置和证书文件
注意:说明:
注意:下面以 Linux 为例,修改 AWS 配置和证书文件。
AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件。
·在配置文件(文件位置是~/.aws/config) 中添加以下配置:
[default] s3 = signature_version = s3 addressing_style = virtual
·在证书文件(文件位置是~/.aws/credentials)中配置腾讯云的密钥:
[default] aws_access_key_id = [COS_SECRETID] aws_secret_access_key = [COS_SECRETKEY]
十五、2. 代码中设置 Endpoint
以存储桶所在地域是ap-guangzhou为例,代码示例如下:
client = boto3.client('s3', endpoint_url='https://cos.ap-guangzhou.myqcloud.com')
十六、PHP
下面以 AWS PHP SDK 3.109.3版本为例,介绍如何适配以便访问 COS 服务。
十七、1. 修改 AWS 配置和证书文件
注意:说明:
注意:下面以 Linux 为例,修改 AWS 配置和证书文件。
AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件。
·在配置文件(文件位置是~/.aws/config) 中添加以下配置:
[default] s3 = addressing_style = virtual
·在证书文件(文件位置是~/.aws/credentials)中配置腾讯云的密钥:
[default] aws_access_key_id = [COS_SECRETID] aws_secret_access_key = [COS_SECRETKEY]
十八、2. 代码中设置 Endpoint
以存储桶所在地域是ap-guangzhou为例:
$S3Client = new S3Client([ 'region' => 'ap-guangzhou', 'version' => '2006-03-01', 'endpoint' => 'https://cos.ap-guangzhou.myqcloud.com']);
十九、.NET
下面以 AWS .NET SDK 3.3.104.12版本为例,介绍如何适配以便访问 COS 服务。
20、初始化
初始化实例时设置腾讯云密钥和 Endpoint,以存储桶所在地域是ap-guangzhou为例:
string sAccessKeyId = "COS_SECRETID";string sAccessKeySecret = "COS_SECRETKEY";string region = "ap-guangzhou";var config = new AmazonS3Config() { ServiceURL = "https://cos." + region + ".myqcloud.com" };var client = new AmazonS3Client(sAccessKeyId, sAccessKeySecret, config);
22、aws-sdk-go
下面以 aws-sdk-go 1.55.7版本为例,介绍如何适配以便访问 COS 服务,完整的样例如下所示。
package mainimport ( "context" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" "os" "log")const bucket = "testbucket-1250000000"func main() { config := &aws.Config{ Region: aws.String("ap-guangzhou"), Endpoint: aws.String("https://cos.ap-guangzhou.myqcloud.com"), S3ForcePathStyle: aws.Bool(false), Credentials: credentials.NewStaticCredentials( os.Getenv("SECRETID"), os.Getenv("SECRETKEY"), "", // 临时密钥 token,永久密钥填空即可 ), } sess, _ := session.NewSession(config) svc := s3.New(sess) fd, err := os.Open("./localfile") if err != nil { log.Fatalf("open file failed, %v", err) } defer fd.Close() _, err = svc.PutObjectWithContext(context.Background(), &s3.PutObjectInput{ Bucket: aws.String(bucket), Key: aws.String("exampleobject"), Body: fd, }) if err != nil { log.Fatalf("put obejct failed: %v", err) } log.Printf("put object success")}
23、aws-sdk-go-v2
下面以 aws-sdk-go-v2版本的上传对象为例,介绍如何适配以便访问 COS 服务,完整样例如下所示。
package mainimport ( "context" "log" "os" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/service/s3")const bucket = "testbucket-1250000000"func main() { cfg, err := config.LoadDefaultConfig(context.TODO(), // debug 模式,打印请求和响应日志 config.WithClientLogMode(aws.LogRequest|aws.LogResponse), config.WithRegion("ap-guangzhou"), config.WithEndpointResolver(aws.EndpointResolverFunc( func(service, region string) (aws.Endpoint, error) { return aws.Endpoint{ PartitionID: "aws", URL: "https://cos.ap-guangzhou.myqcloud.com", SigningRegion: "ap-guangzhou", }, nil }), ), config.WithCredentialsProvider(credentials.StaticCredentialsProvider{ Value: aws.Credentials{ AccessKeyID: os.Getenv("COS_SECRETID"), SecretAccessKey: os.Getenv("COS_SECRETKEY"), }, }), // 需要禁止x-amz-trailer 功能 config.WithRequestChecksumCalculation(aws.RequestChecksumCalculationWhenRequired), ) if err != nil { log.Fatalf("failed to load SDK configuration, %v", err) } client := s3.NewFromConfig(cfg, func(o *s3.Options) { o.UsePathStyle = false }) fd, err := os.Open("./localfile") if err != nil { log.Fatalf("open file failed, %v", err) } defer fd.Close() input := &s3.PutObjectInput{ Body: fd, Bucket: aws.String(bucket), Key: aws.String("exampleobject"), } _, err = client.PutObject(context.Background(), input) if err != nil { log.Fatalf("putobject: %v", err) } log.Printf("putobject success")}
24、C++
下面以 AWS C++ SDK 1.7.68版本为例,介绍如何适配以便访问 COS 服务。
25、1. 修改 AWS 配置和证书文件
注意:说明:
注意:下面以 Linux 为例,修改 AWS 配置和证书文件。
AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件。
·在配置文件(文件位置是~/.aws/config) 中添加以下配置:
[default] s3 = addressing_style = virtual
·在证书文件(文件位置是~/.aws/credentials)中配置腾讯云的密钥:
[default] aws_access_key_id = [COS_SECRETID] aws_secret_access_key = [COS_SECRETKEY]
26、2. 代码中设置 Endpoint
以存储桶所在地域是ap-guangzhou为例,代码示例如下:
Aws::Client::ClientConfiguration awsCC;awsCC.scheme = Aws::Http::Scheme::HTTP;awsCC.region = "ap-guangzhou";awsCC.endpointOverride = "cos.ap-guangzhou.myqcloud.com"; Aws::S3::S3Client s3_client(awsCC);