2013-10-16 11 views
9

से एस 3 ऑब्जेक्ट्स के लिए कैश-कंट्रोल HTTP हैडर सेट करें मैं PHP के लिए अमेज़ॅन एसडीके का उपयोग कर रहा हूं और छवि पर कैश-कंट्रोल हेडर सेट करने का प्रयास कर रहा हूं। जब मैं मेटाडाटा = सरणी ("कैश-कंट्रोल") के माध्यम से इसे जोड़ने का प्रयास करता हूं तो यह एस-बाल्टी में लॉगिन करते समय x-amz-meta-cache-control होने के लिए बदलता है, और जब मैं फ़ाइल डाउनलोड करता हूं, तो कोई कैश नहीं होता है -control सेट। लेकिन अगर मैं मैन्युअल रूप से इस सेटिंग को बदलता हूं, तो कैश-कंट्रोल पूरी तरह से काम करता है। क्या मुझे कुछ पैरामीटर याद आ रहा है जिसे मैं अपलोड पर HTTP अनुरोध शीर्षलेख प्रोग्रामेटिक रूप से सेट करने के लिए उपयोग कर सकता हूं? मैं PutObject विधि का उपयोग कर रहा हूँ। मेरा मानना ​​है कि एडब्ल्यूएस एसडीके 2013 से है।PHP एडब्ल्यूएस एसडीके

+0

क्या आप कृपया मेरी प्रतिक्रिया को "स्वीकृत" के रूप में चिह्नित कर सकते हैं अगर इससे आपकी मदद हो। – Scuzzy

उत्तर

16

कैश नियंत्रण "मेटाडेटा" इंडेक्स के माध्यम से सेट नहीं है, "कैशकंट्रोल" उसी स्तर पर है "मेटाडेटा", इसमें निहित नहीं है।

http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html#_putObject

आप putObject() विधि के लिए आपके विन्यास सरणी के रूप में कुछ इस तरह का उपयोग करें ...

$s3client->putObject(array(
    'Bucket' => '...', 
    'key' => '...', 
    'body' => '...', 
    'CacheControl' => 'max-age=172800', 
    'MetaData' => array(
    'metaKey' => 'metaValue', 
    'metaKey' => 'metaValue' 
))); 

अपलोड() विधि के लिए ...

$s3client->upload(
    'bucket', 
    'key', 
    fopen('sourcefile','r'), 
    'public-read', 
    array('params' => array(
    'CacheControl' => 'max-age=172800', 
    'Metadata' => array(
     'metaKey' => 'metaValue', 
     'metaKey' => 'metaValue' 
)))); 

इसके अलावा, यह इंगित करने योग्य है कि upload()लपेट जाएगा आकार में 5 एमबी की फाइलों के लिए, अन्यथा यह एक मल्टीपार्ट अपलोड अनुरोध शुरू करेगा।

8

यदि आप CacheControl हेडर को अपनी बाल्टी में पहले से ही किसी आइटम में जोड़ना चाहते हैं, तो एसडीके की copyObject विधि का उपयोग करें। आइटम को ओवरराइट करने के लिए MetadataDirective परम को सेट करने के लिए सेट करें।

मैंने एक अजीब चीज देखी: मुझे ContentType हेडर भी सेट करना पड़ा, भले ही यह पहले से सेट हो। अन्यथा छवि ब्राउज़र में इनलाइन प्रदर्शित नहीं करेगी लेकिन डाउनलोड के रूप में पेश की जाएगी।

$result = $s3->copyObject(array(
    'ACL' => 'public-read', 
    'Bucket' => $bucket, // target bucket 
    'CacheControl' => 'public, max-age=86400', 
    'ContentType' => 'image/jpeg', // !! 
    'CopySource' => urlencode($bucket . '/' . $key), 
    'Key' => $key, // target file name 
    'MetadataDirective' => 'REPLACE' 
)); 
संबंधित मुद्दे