使用Write-S3Object时如何设置Cache-Control?

时间:2014-12-31 11:47:30

标签: powershell amazon-web-services amazon-s3 aws-powershell

我正在使用Windows Powershell for AWS,我尝试了以下内容:

Write-S3Object 
   -BucketName 'user-ab-staging' 
   -KeyPrefix 'content/css' 
   -Folder 'content/css' 
   -SearchPattern '*.css' 
   -Metadata @{"Cache-Control" = "Value"}
   -CannedACLName PublicRead

它给了我一个非常奇怪的错误,只尝试加载一个css文件:

Uploaded 1 object(s) to bucket 'user-ab-staging' from 'C:\g\ab-user\WebUserApp\content\css' with keyprefix
 'content/css'
Write-S3Object :
At line:1 char:1
+ Write-S3Object `
+ ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Amazon.PowerShe...eS3ObjectCmdlet:WriteS3ObjectCmdlet) [Write-S3Objec
   t], InvalidOperationException
    + FullyQualifiedErrorId : Amazon.S3.AmazonS3Exception,Amazon.PowerShell.Cmdlets.S3.WriteS3ObjectCmdlet

当我使用Write-S3Object 针对AWS的Powershell扩展

2 个答案:

答案 0 :(得分:3)

我在本地和S3上设置了一些测试文件夹,可以完全复制这个问题。

经过一些挖掘/实验......它与CannedACLName参数有关。删除该参数时,文件上传成功。

这个documentation表示正确使用的选项是PublicRead,但正确的选项实际上是public-read。完成更改后,我能够成功写入指定文件夹中的所有对象。

您的更新代码如下所示:

Write-S3Object 
   -BucketName 'user-ab-staging' 
   -KeyPrefix 'content/css' 
   -Folder 'content/css' 
   -SearchPattern '*.css' 
   -Metadata @{"Cache-Control" = "Value"}
   -CannedACLName public-read

如果您将来需要使用任何其他ACL选项,我建议您尝试从this list in the ACL documentation进行尝试。我已经测试了一些可用的选项,但它们都有效。

答案 1 :(得分:3)

请注意,使用Write-S3Object的-Metadata参数设置" x-amz-meta-cache-control"元数据属性。如果你想设置" Cache-Control" (对于S3网站托管的HTTP响应标头),请使用此参数模式:

-HeaderCollection @{"Cache-Control" = "Value"}