如何以编程方式为Amazon S3设置Http Header?

st7*_*t78 12 .net c# amazon-s3

我想为我的asp.net Web应用程序存储在S3中的文件设置过期日期标题.

  • 第一种情况 - 在PutObject请求期间
  • 第二种情况 - 每月更新一次到期日期以更新到期日期.

Geo*_*ord 19

当您使用Asp.net时,我假设您使用的是AWS .NET SDK.

Expires在上载对象时添加(或任何其他http标头),请将其添加为PutObject请求的一部分.

var client = new Amazon.S3.AmazonS3Client(AWS_Key, AWS_SecretKey);

var req = new Amazon.S3.Model.PutObjectRequest()
                 .WithFilePath(@"C:\myfile.txt")
                 .WithKey("myfile.txt")
                 .WithBucketName("mybucket");

req.AddHeader("expires", "Thu, 01 Dec 1994 16:00:00 GMT");

client.PutObject(req);
Run Code Online (Sandbox Code Playgroud)

要更改现有对象的标题,您需要将对象复制到自身.

var req = new Amazon.S3.Model.CopyObjectRequest()
                 .WithDirective(Amazon.S3.Model.S3MetadataDirective.REPLACE)
                 .WithSourceBucket("mybucket")
                 .WithSourceKey("myfile.txt")
                 .WithDestinationBucket("mybucket")
                 .WithDestinationKey("myfile.txt");

req.AddHeader("expires", "Thu, 01 Dec 1994 16:00:00 GMT");

client.CopyObject(req);
Run Code Online (Sandbox Code Playgroud)

注意:.WithDirective(Amazon.S3.Model.S3MetadataDirective.REPLACE)必须设置才能指定新标头.否则,只复制现有的标题.

更多信息请参阅.NET SDK文档.


Pau*_*mke 8

如果您使用的是AWS SDK 2.X,则"AddHeader"方法将不再可用.要添加标头,只需直接修改标头集合即可.

req.Headers["expires"] = "Thu, 01 Dec 1994 16:00:00 GMT";

以下是Geoff使用的修改示例:

var client = new Amazon.S3.AmazonS3Client(AWS_Key, AWS_SecretKey);

var req = PutObjectRequest req= new PutObjectRequest()
{
    BucketName = "mybucket",
    Key = "myfile.txt",
    FilePath = @"C:\myfile.txt"
};

req.Headers["expires"] = "Thu, 01 Dec 1994 16:00:00 GMT";

client.PutObject(req);
Run Code Online (Sandbox Code Playgroud)

要更改标题,它的方式相同:

var req = new Amazon.S3.Model.CopyObjectRequest()
{
    MetadataDirective = S3MetadataDirective.REPLACE,
    SourceBucket = "mybucket",
    SourceKey = "myfile.txt",
    DestinationBucket = "mybucket",
    DestinationKey = "myfile.txt"
};

req.Headers["expires"] = "Thu, 01 Dec 1994 16:00:00 GMT";

client.CopyObject(req);
Run Code Online (Sandbox Code Playgroud)