pre-signed-url · L4

AWS SDK 產 GET/PUT URL

用 AWS SDK for .NET 產 GET/PUT URL

一句話:核心就一個類別 GetPreSignedUrlRequest——填幾個屬性,交給 s3.GetPreSignedURL(req) 就拿到一條標準 SigV4 URL。切 GET/PUT 靠 Verb,期限用 Expires(絕對時間點)。

NuGet 套件:AWSSDK.S3

建 client(連真 S3)

var s3 = new AmazonS3Client("accessKey", "secretKey", RegionEndpoint.APNortheast1);

region 就是 Level 3 X-Amz-Credential 裡的區域欄位——簽章跟它綁在一起算,所以要先指定。

GET:下載連結

var req = new GetPreSignedUrlRequest {
    BucketName = "my-bucket",
    Key        = "photo.jpg",
    Expires    = DateTime.UtcNow.AddMinutes(15)   // Verb 省略 = GET
};
string url = s3.GetPreSignedURL(req);

PUT:上傳連結(可綁 content-type)

var putReq = new GetPreSignedUrlRequest {
    BucketName  = "my-bucket",
    Key         = "uploads/photo.jpg",
    Verb        = HttpVerb.PUT,
    Expires     = DateTime.UtcNow.AddMinutes(10),
    ContentType = "image/jpeg"   // 填了就會被簽進 SignedHeaders
};
string uploadUrl = s3.GetPreSignedURL(putReq);

三個要記住的重點

非同步版本:await s3.GetPreSignedURLAsync(req),行為一致。

參考來源