我希望为由我的asp.net web应用程序存储在S3中的文件设置到期日期头。
- 第一种情况 - 在PutObject请求期间
- 第二种情况 - 每月更新一次到期日期以更新到期日期。
因为您在使用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);
若要更改现有对象的标题,您需要将该对象复制到其自身。
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);
注意:必须设置.WithDirective(Amazon.S3.Model.S3MetadataDirective.REPLACE)
以指定新的标头。否则,现有的标头只会被复制。
了解更多信息,请参阅.NET SDK文档。
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);
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);
针对 AWSSDK.S3 V3.* 的情况,它的工作原理如下:
request.Headers.Expires = DateTime.Now.AddMinutes(2);