अमेज़ॅन S3 पर दिए गए विस्तार की फ़ाइलों के लिए सामग्री-प्रकार को पुन: बदल रहा है


12

मेरे पास एक नेस्टेड "फ़ोल्डर" संरचना के साथ एक बड़ी S3 बाल्टी है जिसमें (अन्य चीजों के अलावा) स्थिर .json और .md फाइलें हैं। Theses फाइलें text/plainसही के बजाय S3 द्वारा सेवा की जा रही हैं application/jsonऔर text/markdown

मैंने बकेट डिफॉल्ट को अपडेट किया है ताकि नए अपलोड में सही सामग्री प्रकार हो।

"पेड़" पर चलने और एक निश्चित विस्तार से मेल खाती फ़ाइलों के लिए सामग्री प्रकार को अपडेट करने का सबसे अच्छा तरीका क्या है?

जवाबों:


25

यहाँ एक उदाहरण है कि यह कैसे करना है ai cli टूल के साथ। Cp टूल पुनरावर्ती विकल्पों के उपयोग की अनुमति देता है, जो मुझे नहीं लगता कि s3api टूल कर सकता है। इस मामले में, मैं एसवीजी का एक गुच्छा तय कर रहा हूं। जब आप इसे तैयार करने के लिए तैयार हों तो --drrun विकल्प निकालें।

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

मैं कमांड की अंतर्निहित अवधारणा को समझता हूं। लेकिन क्या यह फ़ाइल के संस्करणों को हटा देगा क्योंकि यह एक प्रतिस्थापित निर्देश है? मेरी बाल्टी को संस्करण के साथ कॉन्फ़िगर किया गया है और प्रत्येक फ़ाइल में कुछ संस्करण हैं। इसे प्रतिस्थापित करने से सभी संस्करण नष्ट हो जाएंगे और एक नई फ़ाइल बन जाएगी या क्या यह प्रतिस्थापन के दौरान सभी संस्करणों को ध्यान में रखेगा?
जोज

यह एक अच्छा सवाल है। निश्चित रूप से एक फेंकने वाली बाल्टी में एक परीक्षण के लायक है। मेरी आशा है कि सिर्फ मेटाडेटा को बदलने का अनुरोध संस्करणों को दूर नहीं करेगा लेकिन ...
t1m0

मैंने एक परीक्षण किया, और पता चला कि संस्करण बने रहते हैं, हालांकि मेटाडेटा संशोधित संस्करण नवीनतम संस्करण बन जाता है, पुराने संस्करणों में पिछले मेटाडेटा होता है। मैं अब सभी संस्करणों के मेटाडेटा को पुन: संशोधित करने का एक तरीका खोजने की कोशिश कर रहा हूं, जो कि एक जटिल स्क्रिप्ट बनाने के बिना है जो हर संस्करण को सूचीबद्ध करेगा और फिर उसके मेटाडेटा को संशोधित करेगा ...
जोज

यह कमांड acl को रीसेट करता है। यदि आपको गैर-डिफ़ॉल्ट मान की आवश्यकता है, तो--acl=...
Vasiliy Zverev

3

जब तक आप बोटो / पाइथन या किसी अन्य एडब्ल्यूएस एपीआई का उपयोग करके अपने हाथों को गंदा नहीं करना चाहते हैं, मुझे संदेह है कि नए ऑब्जेक्ट प्रकार को सेट करने के $ aws s3api copy-objectलिए --content-typeध्वज के साथ उपयोग करने के लिए आपका सबसे अच्छा शर्त होगा ।

यहाँ प्रलेखन s3api के लिए।

यह बिना यह कहे चला जाता है कि आपको अपनी पूरी बाल्टी पर पुनरावर्ती रूप से दौड़ने से पहले यह परीक्षण करना चाहिए।


1
परीक्षण के संबंध में, अमेज़ॅन सीएलआई में "ड्राई रन" ध्वज का उपयोग करें।
बार्ट

3

कुछ खुदाई के बाद, मैंने पाया कि s3cmdउपकरण ऐसा कर सकता है। उदाहरण के लिए, JSON फ़ाइलों को अनुप्रयोग / json में सेट करने के लिए:

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

3

जैसा कि पहले उल्लेख किया गया है, आप awsअमेज़ॅन द्वारा टूल का उपयोग कर सकते हैं और स्वयं पर कॉपी-ऑब्जेक्ट के लिए s3api का उपयोग कर सकते हैं , और metadata-directive=REPLACEसामग्री-प्रकार को बदलने के लिए उपयोग कर सकते हैं।

मैं इसे यहां रख रहा हूं, क्योंकि कभी-कभी आप उन फ़ाइलनामों पर पुनरावृति करना चाहेंगे जो डेटाबेस में संग्रहीत हैं, और यह है कि आप इसे क्ली के माध्यम से कैसे कर सकते हैं।

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

यह केवल एक फ़ाइल को प्रतिस्थापित करता है। आप सभी .apk प्रकार की फाइलों के खिलाफ इस कमांड को कैसे निष्पादित करते हैं?
बार्ट

@ बर्ट पुनरावर्ती तरीके से मेरा उत्तर देखें।
t1m0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.