Исключить файлы или определенный тип при записи в 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) Есть ли возможность указать файлы для исключения в -SearchPattern параметр Write-S3Object?

Благодарю.

2 ответа

Решение

Первое, что я не могу использовать -ContentType "image/svg+xml" при загрузке папки, так как она не применяет тип содержимого к файлам.

Поэтому я выбрал два этапа; сначала загрузите все файлы, включая SVG, с неправильным Content-Type. Это необходимо для создания папок на случай, если в папке есть только файлы SVG.

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

После этого я перезагружаю SVG-файл с правильным Content-Type /svg+xml". -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"
}

Можете добавить content-typeк файлам, которые вы загружаете на S3. См. S3 PUT API - однако это означает, что вы будете использовать S3 SDK, предоставляемый AWS, плюс некоторый опыт кодирования.

Чтобы избежать кодирования, используйте браузер S3, который можно настроить с определенным типом пантомимы, когда вы вручную загружаете любые файлы. SVG уже поддерживается браузером S3, поэтому вам не нужно ничего делать, просто загрузите его с помощью этого инструмента.

Другие вопросы по тегам