सवाल एडब्ल्यूएस एस 3 में कैश नियंत्रण कैसे जोड़ें?


मैंने s3cmd कमांड द्वारा 20000 फ़ाइलों को AWS S3 में स्थानांतरित कर दिया है। अब मैं सभी छवियों (.jpg) के लिए कैश-कंट्रोल जोड़ना चाहता हूं

ये फ़ाइलें (एस 3: // बाल्टी-नाम / छवियों /) में स्थित हैं। मैं s3cmd द्वारा सभी छवियों के लिए कैश-कंट्रोल कैसे जोड़ सकता हूं या हेडर जोड़ने का कोई अन्य तरीका है?

धन्यवाद


44
2018-03-19 09:33


मूल




जवाब:


कृपया वर्तमान अपस्ट्रीम मास्टर शाखा का प्रयास करें (https://github.com/s3tools/s3cmd), क्योंकि अब यह एक है modify कमांड, निम्नानुसार उपयोग किया जाता है:

./s3cmd --recursive modify --add-header="Cache-Control:max-age=86400" s3://yourbucket/

56
2018-03-20 03:34



हाय, उत्तर के लिए धन्यवाद, मैंने कोशिश की और मुझे त्रुटि की तरह त्रुटि मिल रही है: अमान्य आदेश: u'modify ' - Rajaraman
इस परिवर्तन के बाद एक्सेस देने वाली फाइलें ... - shajin
@ राजारामन आप इसके बारे में कुछ जानते हैं ?? इस चरण के बाद इसकी पहुंच का खंडन अस्वीकार कर दिया गया - shajin
यह काम करता है .. s3cmd संस्करण 1.5.0-rc1 के साथ परीक्षण किया गया है !: यह ऑब्जेक्ट के सामग्री-प्रकार शीर्षलेख को "बाइनरी / ऑक्टेट-स्ट्रीम" में बदल देता है! एक पीएनजी-फाइल के साथ परीक्षण किया। - Hardy
मैंने @ हार्डी के समान समस्या का अनुभव किया। इसने मेरी सभी फाइलों से सार्वजनिक पठनीयता को भी हटा दिया। ध्यान रहे। - Andrew Badr


एडब्ल्यूएस के अपने ग्राहक के साथ भी:

aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800

34
2017-09-13 16:40



यह काम करता है अगर आप अपने कंप्यूटर पर स्थानीय पथ से एडब्ल्यूएस पर अपलोड कर रहे हैं और सबकुछ उचित कैश-कंट्रोल रखना चाहते हैं - youanden
यह प्रारंभिक सिंक के समय कैश हेडर सेट करने के लिए काम करता है लेकिन मौजूदा फ़ाइलों को अपडेट नहीं करता है। आप इस तरह के एक अद्यतन को मजबूर कर सकते हैं find . -type f -exec touch '{}' \;; aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800 - Matt Byrne
धन्यवाद @ मैटबीरने ने चाल की! - sidonaldson
ओपी नई फाइलों को अपलोड न करने, एस 3 में मौजूदा फाइलों को अपडेट करने के लिए कह रहा है - Beowulfenator
है --recursive अभी भी जरूरी है? सीएलआई दस्तावेज इसे एक तर्क के रूप में सूचीबद्ध नहीं प्रतीत होता है। docs.aws.amazon.com/cli/latest/reference/s3/sync.html - Corey McMahon


S3 में किसी ऑब्जेक्ट पर कैश-कंट्रोल जैसे मेटाडेटा को फिर से अपलोड किए बिना और किसी भी तृतीय पक्ष टूल का उपयोग किए बिना, आप एडब्ल्यूएस सीएलआई के साथ निम्नलिखित कर सकते हैं। आपकी चुनी गई सेटिंग्स के साथ मेटाडेटा को ओवरराइड करते समय यह ऑब्जेक्ट को स्वयं कॉपी करता है:

aws s3api copy-object --copy-source <bucket-name>/<file> --bucket <bucket-name> --key <file> --metadata-directive REPLACE --cache-control "max-age=3600"

इस कमांड को फ़ाइलों के मौजूदा सेट पर करने के लिए एक खोज में प्रक्रिया करें जो बाल्टी में मौजूद है जैसा कि आप उल्लेख करते हैं:

find . -type f -exec aws s3api copy-object --copy-source <bucket-name>/{} --bucket <bucket-name> --key {} --metadata-directive REPLACE --cache-control "max-age=3600"

बदलने के <bucket-name> अपनी बाल्टी के नाम से

चेतावनी: यह आपके सभी मौजूदा मेटाडेटा को एसीएल जैसी फ़ाइलों पर ओवरराइट करेगा, बस कमांड में अतिरिक्त झंडे जोड़ें उदा। --acl public-read आपको जो चाहिए उसे सेट करने के लिए (धन्यवाद @ जैक्सन)


17
2018-06-02 04:58



इसने मेरे कैश हेडर सेट किए, हालांकि इसने फाइलों पर सेट की गई "सार्वजनिक" अनुमतियां हटा दीं (उन्हें मेरी एस 3-होस्टेड साइट पर अवलोकन करने योग्य)। फ़ाइलों को सार्वजनिक रखने के लिए, मुझे कमांड को चलाने के लिए था --acl public-read। - Jackson


मेरी बाल्टी में एमपी 4, जेपीजी, और अन्य फाइलें हैं। जिन फ़ाइलों को मैं अपडेट करना चाहता था उन्हें "उप-बाल्टी" में संग्रहित किया जाता है (उदा: https://s3.amazonaws.com/my.bucket/sub-directory/my-video.mp4)। मेरे मामले में मैं केवल mp4 फ़ाइलों पर कैश नियंत्रण अद्यतन करना चाहता था:

aws s3 cp \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive

यह जांचने के लिए कि यह क्या करेगा, आप इसका उपयोग कर सकते हैं --dryrun झंडा:

aws s3 cp --dryrun \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive

13
2017-10-06 13:56



मुझे यह त्रुटि मिलती है: "CopyObject ऑपरेशन को कॉल करते समय: यह प्रतिलिपि अनुरोध अवैध है क्योंकि यह ऑब्जेक्ट के मेटाडेटा, स्टोरेज क्लास, वेबसाइट रीडायरेक्ट स्थान या एन्क्रिप्शन विशेषताओं को बदले बिना किसी ऑब्जेक्ट को कॉपी करने का प्रयास कर रहा है।" - Flimm
इसे ठीक करने के लिए, मुझे जोड़ना पड़ा --metadata-directive REPLACE --acl public-read। - Flimm


PUT / ObjectName HTTP/1.1 
Host: BucketName .s3.amazonaws.com 
Date: date 
x-amz-meta-Cache-Control : max-age= <value in seconds> 
Authorization: signatureValue 

प्रत्येक मेटाडाटा सेटिंग में एक कुंजी-मूल्य जोड़ी होती है। कैश नियंत्रण मेटाडेटा कुंजी "कैश-कंट्रोल" है और मान है “max-age=<time for which you want your object to be accessed from cache in seconds>”

आप अमेज़ॅन एस 3 ऑब्जेक्ट्स के लिए अमेज़ॅन एस 3 ऑब्जेक्ट्स को अमेज़ॅन एस 3 सर्वर को दो शीर्ष तरीकों से उचित हेडर के साथ भेजकर कैश कंट्रोल कस्टम हेडर सेट कर सकते हैं:

अमेज़ॅन एस 3 रीस्ट एपीआई पुट ऑब्जेक्ट अनुरोध का उपयोग कर कैश कंट्रोल मेटाडाटा सेट करें - यदि आप प्रोग्रामर हैं, तो आप कस्टम ऑडियंस अनुरोध के साथ कस्टम हेडर सेट करने के लिए अमेज़ॅन एस 3 आरईएसटी या एसओएपी एपीआई का उपयोग करने के लिए अपना खुद का सॉफ्टवेयर प्रोग्राम लिख सकते हैं। यह वेबसाइट केवल अमेज़ॅन एस 3 आरईएसटी एपीआई को संदर्भित करती है, कृपया एसओएपी एपीआई का उपयोग करने के तरीके के विवरण के लिए एडब्ल्यूएस दस्तावेज वेबसाइट देखें। बाल्टी एक्सप्लोरर यूजर इंटरफेस का उपयोग कर कैश कंट्रोल मेटाडाटा सेट करें - यदि आप सॉफ़्टवेयर प्रोग्राम लिखने के बजाय माउस क्लिक का उपयोग करके कैश कंट्रोल जैसे कस्टम HTTP हेडर सेट करना चाहते हैं, तो आप इसके लिए बाल्टी एक्सप्लोरर के यूजर इंटरफेस का उपयोग कर सकते हैं। इस कस्टम HTTP शीर्षलेख के साथ, आप कैशिंग व्यवहार निर्दिष्ट कर सकते हैं जिसे अनुरोध / प्रतिक्रिया श्रृंखला के साथ पालन किया जाना चाहिए और कैश को अनुरोध या प्रतिक्रिया में हस्तक्षेप से रोकने के लिए।

अधिक जानकारी के लिए कृपया जांचें अमेज़ॅन एस 3 ऑब्जेक्ट के लिए कैश कंट्रोल हेडर कैसे सेट करें?`


3
2018-03-19 09:40





बस s3cmd को संस्करण 1.5.1 में अपग्रेड करें और समस्या हल हो जाएगी।


1
2018-05-14 05:39





(चूंकि ओपी ने किसी अन्य तरीके से पूछा)

आप इसे भी कर सकते हैं aws-cli, उदा। (V: aws-cli/1.8.8 Python/2.7.2 Darwin/12.5.0):

aws s3api put-object \
--bucket mybucket \
--key my/key \
--cache-control max-age=1 \
--body myfile.txt

हालांकि कृपया ध्यान दें कि आप किसी मौजूदा वस्तु को फिर से लिखेंगे।


1
2017-10-22 12:30





ऐसा करने का एक और आसान तरीका एस 3 ब्राउज़र का उपयोग करना है: http://s3browser.com/ आप बस अपनी इच्छित छवियों का चयन करने के लिए बस क्लिक या ctrl + ए को स्थानांतरित कर सकते हैं; फिर बस 'एचटीपी हेडर' टैब पर जाएं और 'नया हेडर जोड़ें' पर क्लिक करें और फिर 'परिवर्तन लागू करें' पर क्लिक करें। यह स्वचालित रूप से मेरी सभी अन्य अनुमतियों और शीर्षकों को रखता है।

यदि आप एस 3 बहुत उपयोग करते हैं; यदि आपके पास भारी अपलोड हैं (तो FTP, ड्रॉपबॉक्स या अन्यथा दुनिया में कुछ भी बेहतर नहीं है!)


-2
2017-09-25 17:31