最近有须要用到AWS S3云存储上传附件,这里对利用.NET或.NET Core在调用SDK APi须要注意的一点小问题作个记录,或许能对后续有用到的童鞋提供一点帮助git
官方已提供针对.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存储对象时暂遇到或需注意上述两个小问题,在此作一记录,若能帮到有须要的童鞋,将再好不过了。域名