2

フォルダーを S3 にアップロードして、静的 Web サイトとして機能させようとしています。私が抱えている問題は、フォルダー内に .css、.png、.svg などの特定の拡張子のファイルがあることです。AWS PowerShell ツールを使用しており、次のコマンドをアップロードすると、.svg ファイルがアップロードされますコンテンツ タイプが間違っています。

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

回避策として、フォルダーを反復処理し、.svg ファイルをアップロードしないことを思いつきました。フォルダーを繰り返し、正しいコンテンツ タイプを設定した .svg のみをアップロードします。

Write-S3Object -BucketName bucket-name -Folder folderName -Recurse -Force -KeyPrefix folderName -CannedACLName NoACL -SearchPattern "*.svg" -ContentType "image/svg+xml"

そこで、ここで 2 つの質問があります。

1) 2 段階のアプローチを行う代わりに、すべてのファイルを一度にアップロードして、svg ファイルの正しいコンテンツ タイプを設定できますか?

-SearchPattern2) のパラメータで除外するファイルを指定する方法はありますWrite-S3Objectか?

ありがとう。

4

2 に答える 2

1

まず-ContentType "image/svg+xml"、ファイルにコンテンツタイプが適用されないため、フォルダーをアップロードするときに使用できません。

そこで、私は 2 段階のアプローチを取りました。最初に SVG を含むすべてのファイルを不適切な Content-Type でアップロードします。これは、フォルダに SVG ファイルしかない場合にフォルダを作成するためです。

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

その後、/svg+xml の正しい Content-Type を使用して 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 に答える