.NET Core AWS S3雲存儲

前言

最近有須要用到AWS S3雲存儲上傳附件,這裏對利用.NET或.NET Core在調用SDK APi須要注意的一點小問題作個記錄,或許能對後續有用到的童鞋提供一點幫助git

AWS S3雲存儲

官方已提供針對.NET/.NET Core針對S3的APi(https://docs.aws.amazon.com/sdkfornet/v3/apidocs/)和SDK demo(https://github.com/awslabs/aws-sdk-net-samples),首先咱們下載針對.NET Core的SDK包(AWSSDK.Core)以及經過S3存儲對象包(AWSSDK.S3),以下圖所示github

接下來咱們再利用官方所給SDK Demo,此時並不能直接複製拿來使用,以下:api

using (client = new AmazonS3Client(RegionEndpoint.USWest2))
{
    Console.WriteLine("Listing buckets");
    ListingBuckets();

    Console.WriteLine("Creating a bucket");
    CreateABucket();

    Console.WriteLine("Writing an object");
    WritingAnObject();

    Console.WriteLine("Reading an object");
    ReadingAnObject();

    Console.WriteLine("Deleting an object");
    DeletingAnObject();

    Console.WriteLine("Listing objects");
    ListingObjects();
}

AWS S3上傳附件要提供上傳憑證和配置,AK(awsAccessKeyId)和SK(awsSecretAccessKey)做爲憑證。Region(awsRegion)和EndPoint(awsEndPoint)做爲配置,大部分狀況下咱們都是利用以下構造spa

public AmazonS3Client(AWSCredentials credentials, AmazonS3Config clientConfig);

因憑證就是AK/SK,咱們也可直接提供ak、sk,以下構造,一切根據實際業務對接狀況而具體分析code

public AmazonS3Client(string awsAccessKeyId, string awsSecretAccessKey, AmazonS3Config clientConfig);

經過官網介紹,憑證能夠經過配置文件、環境變量等等共享,這一塊並非重點,未細看,請忽略,我直接將其存放到配置文件中。最終構造AWSS3Client,以下代碼:對象

//提供awsAccessKeyId和awsSecretAccessKey構造憑證
var credentials = new BasicAWSCredentials(awsAccessKeyId, awsSecretAccessKey);

//提供awsEndPoint(域名)進行訪問配置
var clientConfig = new AmazonS3Config
{
    ServiceURL = awsEndPoint
};

var amazonS3Client = new AmazonS3Client(credentials, clientConfig);

AWS提供了經常使用的ReginEndPoint,但若對接方提供了自定義Region,則需經過以下配置獲取RegionEndPointblog

var clientConfig = new AmazonS3Config
{
    RegionEndpoint = RegionEndpoint.GetBySystemName(awsRegion),
    ServiceURL = awsEndPoint
};

此時再運行將會拋出以下異常:get

此時針對上述訪問配置,繼續配置ForcePathStyle爲true,說明請求都將採用路徑風格地址,據猜想咱們使用指定域名(ServiceURL)來發送請求,因此應該必須指定此屬性。string

var clientConfig = new AmazonS3Config
{
    RegionEndpoint = RegionEndpoint.GetBySystemName(awsRegion),
    ServiceURL = awsEndPoint,
    ForcePathStyle = true
};

總結

利用.NET Core在AWS S3存儲對象時暫遇到或需注意上述兩個小問題,在此作一記錄,若能幫到有須要的童鞋,將再好不過了。域名

相關文章
相關標籤/搜索