Как я могу установить Cache-Control при использовании Write-S3Object?

Я использую Windows Powershell для 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 и расширение Powershell для AWS?

2 ответа

Решение

Я настроил несколько тестовых папок локально и на S3 и могу точно воспроизвести эту проблему.

После некоторых копаний / экспериментов... это относится к CannedACLName параметр. Файлы успешно загружаются при удалении этого параметра.

Эта документация говорит, что правильный вариант использования 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 в будущем, я бы рекомендовал вместо этого попробовать этот список в документации ACL. Я протестировал несколько доступных вариантов, и все они сработали.

Обратите внимание, что с помощью -Metadata Аргумент для Write-S3Object устанавливает свойство метаданных "x-amz-meta-cache-control". Если вы хотите установить "Cache-Control" (как для заголовков ответов HTTP для хостинга веб-сайтов S3), используйте вместо этого этот шаблон аргумента:

-HeaderCollection @{"Cache-Control" = "Value"}
Другие вопросы по тегам