Eu tenho um grande bucket S3 com uma estrutura de "pastas" aninhada contendo (entre outras coisas) arquivos estáticos .json e .md. Esses arquivos estão sendo servidos pelo S3 como text/plain
em vez dos application/json
arquivos text/markdown
.
Atualizei os padrões do bucket para que novos uploads tenham o tipo de conteúdo correto.
Qual é a melhor maneira de percorrer a "árvore" e atualizar o tipo de conteúdo dos arquivos que correspondem a uma determinada extensão?
Responder1
Aqui está um exemplo de como fazer isso com a ferramenta aws cli. A ferramenta cp permite o uso de opções recursivas, o que não acho que a ferramenta s3api possa fazer. Neste caso, estou consertando vários SVGs. Remova as opções --dryrun quando estiver pronto para liberá-lo.
aws s3 cp \
--exclude "*" \
--include "*.svg" \
--content-type="image/svg+xml" \
--metadata-directive="REPLACE" \
--recursive \
--dryrun \
s3://mybucket/static/ \
s3://mybucket/static/
Responder2
Depois de algumas pesquisas, descobri que a s3cmd
ferramenta pode fazer isso. Por exemplo, para definir arquivos JSON como application/json:
s3cmd --recursive modify --acl-public \
--add-header='content-type':'application/json' \
--exclude '' --include '.json' \
s3://bucket/
Responder3
A menos que você queira sujar as mãos usando boto/python ou outra API da AWS, suspeito que sua melhor aposta seria usar $ aws s3api copy-object
o --content-type
sinalizador para copiar um objeto para si mesmo, definindo o novo tipo de conteúdo.
Aqui está odocumentaçãopara s3api.
Nem é preciso dizer que você deve testar isso primeiro, antes de executá-lo recursivamente em todo o seu bucket.
Responder4
Conforme mencionado anteriormente, você pode usar aws
a ferramenta da Amazon e usar s3api para copiar o objeto para si mesmo e usar metadata-directive=REPLACE
para alterar o tipo de conteúdo.
Estou colocando isso aqui, porque às vezes você deseja iterar em nomes de arquivos armazenados no banco de dados, e é assim que você pode fazer isso através do cli.
aws s3api copy-object \
--content-type="application/vnd.android.package-archive" \
--metadata-directive="REPLACE" \
--copy-source "MYBUCKET/FILE.apk" \
--bucket "MYBUCKET" \
--key "FILE.apk" \
--acl public-read