我正在尝试将文件夹上传到S3以用作静态网站。我的问题是文件夹中有某些扩展名的文件,例如.css,.png,.svg等。我使用的是AWS PowerShell工具,当我上传以下命令时,.svg文件是通过以下方式上传的内容类型错误。

Write-S3Object -BucketName bucket-name -Folder folderName -Recurse -Force -KeyPrefix folderName -CannedACLName NoACL

作为一种解决方法,我想到的是迭代文件夹,而不上传.svg文件。重新迭代文件夹,仅上传.svg设置正确的-content-type
Write-S3Object -BucketName bucket-name -Folder folderName -Recurse -Force -KeyPrefix folderName -CannedACLName NoACL -SearchPattern "*.svg" -ContentType "image/svg+xml"

所以我在这里有两个问题。

1)我可以一次性上传所有文件,而不是采用两步方法,而是为svg文件设置正确的内容类型?

2)是否有指定要在-SearchPatternWrite-S3Object参数中排除的文件?

谢谢。

最佳答案

第一件事是我在上传文件夹时不能使用-ContentType "image/svg+xml",因为它没有将content-type应用于文件。

因此,我采取了两步法;首先上传所有文件,包括具有错误Content-Type的SVG。这是为了在文件夹仅包含SVG文件的情况下创建文件夹。

Write-S3Object -BucketName react-ui -Folder $i.FullName -Recurse -KeyPrefix $i.Name -CannedACLName NoACL

之后,我用正确的Content-Type / svg + xml重新上传SVG文件。此处的-Key参数非常重要,因为您可以使用此参数定义目标文件夹的路径。
foreach ($i in Get-ChildItem $path -Recurse -Include "*.svg")
{
  $filename = [System.IO.Path]::GetFileName($i)
  $awsPath = $i.DirectoryName.Substring($i.DirectoryName.IndexOf($path) + $path.Length)
  $fileWithPath = $awsPath + "\"+ $filename
  Write-S3Object -BucketName react-ui -File $i -Key $fileWithPath -CannedACLName NoACL -ContentType "image/svg+xml"
}

07-24 09:38
查看更多