写入 Amazon AWS S3 时排除文件或特定类型

Exclude files or certain type when writing to Amazon AWS S3

我正在尝试将文件夹上传到 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) Write-S3Object-SearchPattern 参数中是否可以指定要排除的文件?

谢谢。

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

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

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

所以我采取了两步走的方法;首先上传所有文件,包括内容类型不正确的 SVG。这是为了创建文件夹,以防文件夹中只有 SVG 文件。

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

之后,我重新上传了正确内容类型为 /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"
}