2

我正在尝试将文件夹上传到 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 文件设置正确的内容类型?

-SearchPattern2)是否可以在参数中指定要排除的文件Write-S3Object

谢谢。

4

2 回答 2

1

首先是我-ContentType "image/svg+xml"在上传文件夹时无法使用,因为它不会将内容类型应用于文件。

所以我采取了两步法;首先上传所有文件,包括内容类型不正确的 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"
}
于 2016-04-11T08:54:13.603 回答
-1

您可以添加content-type到您上传到 S3 的文件中。请参阅:S3 PUT API - 但这意味着您将使用 AWS 提供的 S3 SDK 以及一些编码经验。

为避免编码,请在手动上传任何文件时使用可配置特定 mime 类型的S3 浏览器。S3 浏览器已经支持 SVG,因此您无需执行任何操作,只需使用此工具上传即可。

于 2016-04-08T18:19:44.947 回答