Как я могу установить 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"}