Подтвердить что ты не робот

Как настроить Http Header для Amazon S3 программно?

Я хочу установить заголовок даты истечения срока для файлов, которые хранятся в S3 с помощью моего веб-приложения asp.net.

  • первый случай - во время PutObject запросы
  • второй случай - обновление срок действия один раз в месяц до даты истечения срока действия.

Спасибо заранее.

4b9b3361

Ответ 1

Как вы используете 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 docs.

Ответ 2

Если вы используете AWS SDK 2.X, то метод "AddHeader" больше не доступен. Чтобы добавить заголовок, вы просто изменяете коллекцию заголовков напрямую.

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

Вот приведенный выше пример Джеффа:

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);

Ответ 3

Для AWSSDK.S3 V3. * его работает следующим образом:

request.Headers.Expires = DateTime.Now.AddMinutes(2);