AWS S3是亞馬遜的一種文件存儲服務使用方便。
一、配置服務
public static class AWS_S3ClientInfo { private static readonly string awsAccessKey = "AKIAJOXFZDXXXXX"; private static readonly string awsSecretKey = "6s2AGbNYmhF4xeXXXXXXXXX/"; public static readonly string bucketName = "test"; //提供最基本的一個配置 public static AmazonS3Config config = new AmazonS3Config() { //這個地址是固定的,可以不寫 //ServiceURL = "http://s3.amazonaws.com", //因為aws服務器是分地區的,這里如果不配置區域會一直報錯,還找不到頭緒。 RegionEndpoint = RegionEndpoint.APSoutheast1, }; public static IAmazonS3 GetS3ClientInfo() { return new AmazonS3Client(awsAccessKey, awsSecretKey, config); } }
二、調用上傳服務
public void UpLoadFile() { try { using (IAmazonS3 s3Client = AWS_S3ClientInfo.GetS3ClientInfo()) { var bt = File.ReadAllBytes(AppDomain.CurrentDomain.BaseDirectory + "../../img/a.txt"); var mm= new MemoryStream(bt); PutObjectRequest putObjectRequest = new PutObjectRequest(); putObjectRequest.InputStream = mm; //可以上傳string類型 //putObjectRequest.ContentBody = "你好!"; putObjectRequest.BucketName = AWS_S3ClientInfo.bucketName; putObjectRequest.ContentType = "application/octet-stream";
putObjectRequest.Metadata.Add("Access-Control-Allow-Origin", "*"); //文件的路徑 putObjectRequest.Key = $"img/test-6.jpg"; //文件權限 putObjectRequest.CannedACL = S3CannedACL.PublicRead; PutObjectResponse putObjectResponse = s3Client.PutObject(putObjectRequest); mm.Dispose(); Console.WriteLine("結果=" + putObjectResponse.HttpStatusCode); } } catch (Exception e) { Console.WriteLine("Exception message: {0}", e.Message); } }
三、下載服務
using (IAmazonS3 s3Client = AWS_S3ClientInfo.GetS3ClientInfo()) { GetObjectRequest request = new GetObjectRequest() { BucketName = AWS_S3ClientInfo.bucketName, Key = "s3.txt" }; //下載 GetObjectResponse response = s3Client.GetObject(request); response.WriteResponseStreamToFile(AppDomain.CurrentDomain.BaseDirectory + "1.txt"); }
四、刪除服務
using (IAmazonS3 s3Client = AWS_S3ClientInfo.GetS3ClientInfo()) { GetObjectRequest request = new GetObjectRequest() { BucketName = AWS_S3ClientInfo.bucketName, Key = "s3.txt" }; //刪除 s3Client.DeleteObject(request.BucketName, request.Key); }
這個服務在Windows平台上沒問題,在linux平台上上傳不了,需要添加忽略證書
//忽略驗證ssl/tls證書 ServicePointManager.ServerCertificateValidationCallback =(sender, certificate, chain, errors) => true;