Как установить Http Header для Amazon S3 программно? - PullRequest
12 голосов
/ 04 апреля 2011

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

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

Ответы [ 3 ]

19 голосов
/ 04 апреля 2011

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

.
7 голосов
/ 28 июля 2014

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

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);
2 голосов
/ 30 декабря 2016

Для AWSSDK.S3 V3. * Работает так:

request.Headers.Expires = DateTime.Now.AddMinutes(2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...