C# 如何以编程方式为AmazonS3设置Http头?

C# 如何以编程方式为AmazonS3设置Http头?,c#,.net,amazon-s3,C#,.net,Amazon S3,我想为asp.net web应用程序存储在S3中的文件设置过期日期标题 第一个案例-在PutObject期间 请求 第二个案例-更新 截止日期每月一次 更新到期日期 当您使用Asp.net时,我假设您使用的是 要在上载对象时添加Expires(或任何其他http头),请将其作为PutObject请求的一部分添加 var client = new Amazon.S3.AmazonS3Client(AWS_Key, AWS_SecretKey); var req = new Amazon.S3.

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

  • 第一个案例-在PutObject期间 请求
  • 第二个案例-更新 截止日期每月一次 更新到期日期

    • 当您使用Asp.net时,我假设您使用的是

      要在上载对象时添加
      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)
      ,才能指定新的标题。否则,现有的标题将被复制过来


      更多信息请参见。

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

      req.Headers[“expires”]=“1994年12月1日星期四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);
      

      谢谢你的回答。我会在一两天内实施后将其标记为已接受谢谢。这对我帮助很大@BigJoe714-没问题。感谢您的反馈:)在这个问题上,这个答案比SDK文档要有用得多:“将头添加到请求的头集合中。”更改头时要小心,因为上面的代码也会将权限更改为完全私有(例如,如果是公共读取)。要保持相同的
      CannedACL
      请在请求中指定它