AWS SDK 访问阿里云 OSS

翁钧
2023-12-01

S3 已经成为云对象存储领域的规范,主流的对象存储都有对它的支持。阿里云 OSS 也支持 S3 协议,我们可以使用AWS的SDK对其进行操作,当然由于OSS与S3在功能和实现上的差别,OSS 不可能支持所有的AWS S3操作,但是,对于日常大部分操作,它都是支持的。

##AWS CLI

  • aws configure --p aliyun
  • aws configure set s3.addressing_style virtual --p aliyun
  • aws s3 ls --endpoint-url http://oss-cn-hangzhou.aliyuncs.com --p aliyun

##AWS JAVA SDK

  • 获取AWS JAVA SDK(maven)
        <dependency>
    		<groupId>com.amazonaws</groupId>
    		<artifactId>aws-java-sdk</artifactId>
    		<version>1.11.298</version>
    	</dependency>
    
  • 示例代码
         import java.util.List;
    
         import com.amazonaws.auth.AWSCredentials;
         import com.amazonaws.auth.AWSStaticCredentialsProvider;
         import com.amazonaws.auth.profile.ProfileCredentialsProvider;
         import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
         import com.amazonaws.services.s3.AmazonS3;
         import com.amazonaws.services.s3.AmazonS3ClientBuilder;
         import com.amazonaws.services.s3.model.Bucket;
    
         public class AwsAliyun {
              public static void main(String[] args) {
    	           AWSCredentials credentials = new ProfileCredentialsProvider("aliyun").getCredentials();
    
    	           AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
    			.withCredentials(new AWSStaticCredentialsProvider(credentials))
    			                 .withEndpointConfiguration(new EndpointConfiguration("http://oss-cn-hangzhou.aliyuncs.com", "oss")).build();
    
    	           List<Bucket> lb = s3Client.listBuckets();
    	           for(Bucket b: lb) {
    		           System.out.println(b.getName());
    	           }
             }
        }
    

##AWS PYTHON SDK

  • 获取AWS PYTHON SDK
    pip install boto3
    
  • 示例代码
        #!/usr/bin/env python
        #coding: utf-8
    
        import boto3
    
        session = boto3.session.Session(profile_name='aliyun')
        s3 = session.resource('s3', endpoint_url='http://oss-cn-hangzhou.aliyuncs.com')
    
        for bucket in s3.buckets.all():
            print(bucket.name)
    

##AWS GO SDK

  • 获取AWS GO SDK
     
         package main
    
         import (
              "fmt"
    
              "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() {
              sess := session.Must(session.NewSessionWithOptions(session.Options{
              Config: aws.Config{
                  Endpoint: aws.String("http://oss-cn-hangzhou.aliyuncs.com"), 
                  Region: aws.String("oss")},
              Profile: "aliyun",
         }))
    
         svc := s3.New(sess)
         resp, _:= svc.ListBuckets(&s3.ListBucketsInput{})
         for _, bucket := range resp.Buckets {
             fmt.Println(*bucket.Name)
         }
    

}
```

##AWS PHP SDK

  • 获取AWS PHP SDK
        curl -sS https://getcomposer.org/installer | php
        php composer.phar require aws/aws-sdk-php
    
  • 示例代码
    require 'vendor/autoload.php';
    use Aws\S3\S3Client;
    
    $client = S3Client::factory([  
        'version' => '2006-03-01',
        'profile' => 'aliyun',
        'region' => 'oss-cn-hangzhou',
        'endpoint' => 'http://oss-cn-hangzhou.aliyuncs.com'
    ]); 
    
    $result = $client->listBuckets();    
    foreach($result['Buckets'] as $b) {    
        var_dump($b);    
    }
    
 类似资料: