Amazon S3'te belirli bir uzantının dosyaları için içerik türünü tekrar tekrar değiştirme


12

(Diğer şeylerin yanı sıra) statik .json ve .md dosyaları içeren bir iç içe "klasör" yapısı ile büyük bir S3 kova var. Bu dosyalar text/plaindoğru application/jsonve yerine S3 tarafından sunuluyor text/markdown.

Yeni yüklemelerin doğru içerik türüne sahip olması için grup varsayılanlarını güncelledim.

Belirli bir uzantıyla eşleşen dosyaların "ağacında" yürümenin ve içerik türünü güncellemenin en iyi yolu nedir?

Yanıtlar:


25

İşte aws cli aracıyla bunun nasıl yapılacağı ile ilgili bir örnek. Cp aracı ben s3api aracı yapabileceğini sanmıyorum bir özyinelemeli seçeneklerin kullanımına izin verir. Bu durumda, bir grup SVG'yi düzeltiyorum. Açmaya hazır olduğunuzda --dryrun seçeneklerini kaldırın.

aws s3 cp \
      --exclude "*" \
      --include "*.svg" \
      --content-type="image/svg+xml"  \
      --metadata-directive="REPLACE" \
      --recursive \
      --dryrun \
       s3://mybucket/static/ \
       s3://mybucket/static/

Komutun altında yatan kavramı anlıyorum. Ancak bu, değiştirme yönergesi olduğu için dosyanın sürümlerini siler mi? Grubum sürüm oluşturma ile yapılandırıldı ve her dosyanın bazı sürümleri var. Değiştirilmesi tüm sürümleri silecek ve yeni bir dosya oluşturacak mı yoksa değiştirme sırasında tüm sürümleri dikkate alacak mı?
Joze

Bu iyi bir soru. Kesinlikle bir atma kovasında bir teste değer. Benim umudum sadece meta veri değiştirme isteği sürümleri uçurmak olmaz ama ...
t1m0

Bir test yaptım ve sürümlerin kaldığı ortaya çıkıyor, ancak meta veri değiştirilmiş sürüm en son sürüm haline geliyor, eski sürümler önceki meta verilere sahip. Şimdi tüm sürümlerin meta verilerini tekrar tekrar değiştirmek için bir yol bulmaya çalışıyorum, yani her sürümü listeleyecek ve daha sonra meta verilerini değiştirecek karmaşık bir komut dosyası yapmadan ...
Joze

Bu komut acl'yi sıfırlar. Varsayılan olmayan değere ihtiyacınız varsa, ekleyin--acl=...
Vasiliy Zverev

3

Boto / python veya başka bir AWS API kullanarak ellerinizi kirletmek istemiyorsanız, en iyi bahsinizin , yeni içerik türünü ayarlayarak bir nesneyi kendisine kopyalamak $ aws s3api copy-objectiçin --content-typebayrakla kullanmak olduğundan şüpheleniyorum .

İşte s3api belgeleri .

Tüm kova üzerinde tekrar tekrar çalıştırmadan önce bunu test etmeniz gerektiğini söylemeye gerek yok.


1
Test ile ilgili olarak, Amazon CLI'daki "kuru çalışma" bayrağını kullanın.
bart

3

Biraz kazmadan sonra, s3cmdaracın bunu yapabileceğini buldum . Örneğin, JSON dosyalarını application / json olarak ayarlamak için:

s3cmd --recursive modify --acl-public \
       --add-header='content-type':'application/json' \
       --exclude '' --include '.json' \
       s3://bucket/

3

Daha önce de belirtildiği gibi, awsAmazon'un aracını kullanabilir ve nesneyi kendisine kopyalamak için s3api'yi kullanabilir metadata-directive=REPLACEve içerik türünü değiştirmek için kullanabilirsiniz .

Bunu buraya koyuyorum, çünkü bazen veritabanında saklanan dosya adlarını yinelemek istiyorsunuz ve bunu cli ile yapabilirsiniz.

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

Bu yalnızca bir dosyanın yerini alır. Bu komutu .apk türündeki tüm dosyalara karşı nasıl yürütürsünüz?
bart

@bart özyineli yol için cevabımı gör.
t1m0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.