【问题标题】:Aws sdk for .NET custom region endpoint configuration用于 .NET 自定义区域端点配置的 Aws sdk
【发布时间】:2021-06-21 23:03:06
【问题描述】:

我正在尝试为 .net 配置 aws sdk,以使用提供 aws 兼容 api 的云服务提供商。下面使用 aws sdk for php 上传的代码有效,但如何为 aws sdk .net 正确配置它,尤其是区域部分: 此代码在 php 中有效:

    $bucketName = 'big_bucket';
    $filePath = './img33.png';
    $keyName = basename($filePath);
    $IAM_KEY = 'top_secret_key';
    $IAM_SECRET = 'top_secret_secret';
    
    use Aws\S3\S3Client;
    use Aws\S3\Exception\S3Exception;
    
    // Set Amazon S3 Credentials
    $s3 = S3Client::factory(
        array(
            'endpoint' => 'https://s3-kna1.citycloud.com:8080',
            'credentials' => array(
                'key' => $IAM_KEY,
                'secret' => $IAM_SECRET
            ),
            'version' => 'latest',
            'region'  => 's3-kna1',
            'use_path_style_endpoint' => true
        )
    );
            $s3->putObject(
                array(
                    'Bucket'=>$bucketName,
                    'Key' =>  $keyName,
                    'SourceFile' => $keyName,
                    'StorageClass' => 'REDUCED_REDUNDANCY',
                    'ACL' => 'public-read'
                )
            );

下面的 .net 代码还不能工作:

using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Transfer;
    
    public class CityCloudFileHandler
    {
        private string _accessKey;
        private string _secretKey;
        private string _mediaBucket;
        private string _serviceUrl;
        private S3CannedACL _s3CannedAcl;
        private AmazonS3Config _s3Config;

        public CityCloudFileHandler(string accessKey, string secretKey, string mediaBucket, string serviceUrl,
            S3CannedACL s3CannedAcl = null)
        {
            _accessKey = accessKey;
            _secretKey = secretKey;
            _mediaBucket = mediaBucket;
            _serviceUrl = serviceUrl;
            _s3CannedAcl = s3CannedAcl;
            _s3Config = new AmazonS3Config
            {
                ServiceURL = "https://s3-kna1.citycloud.com:8080",
                ForcePathStyle = true
            };
        }
        
        private IAmazonS3 MediaS3()
        {
            return new AmazonS3Client(_accessKey, _secretKey, _s3Config);
        }
    }

【问题讨论】:

    标签: amazon-web-services aws-sdk aws-sdk-net


    【解决方案1】:

    AmazonS3Client 的许多构造函数都接受 RegionEndpoint 示例。该值如下所示:

    RegionEndpoint.USWest2 或 RegionEndpoint.USEast1

    这里是 AmazonS3Client API 文档的链接:AmazonS3Client

    此外,如果您已使用 AWS CLI 通过创建两个文件(存储在 Windows 上的 C:\Users\USER_NAME.aws\ 中)来设置默认用户

    文件凭据应包含以下信息:

    [default]
    aws_access_key_id = your_access_key_id
    aws_secret_access_key = your_secret_access_key
    

    另一个名为 config 的文件将包含(至少)以下几行:

    [default]
    region = us-east-2
    

    一旦该用户设置完毕,只要存储桶与默认用户位于同一区域,您就可以不带参数调用客户端构造函数。

    这里有一个将对象上传到 S3 存储桶的示例:UploadObjectExample

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 2017-12-15
      • 2020-09-01
      • 2020-08-11
      • 2018-09-02
      • 2017-12-17
      • 2021-07-27
      相关资源
      最近更新 更多