2014-07-09 11 views
14

मुझे अपने अमेज़ॅन एस 3 स्टोरेज पर बनाए गए विशिष्ट निर्देशिकाओं के अंदर अपनी फाइलें अपलोड करने की आवश्यकता है।निर्देशिका में PutObject अमेज़ॅन s3/PHP

$s3->putObject(array(
      'Bucket' => $bucket, 
      'ContentType' => $mime, 
      'Key'   => $localImage, 
      'ACL'   => 'public-read', 
      'SourceFile' => $localImage, 
      'CacheControl' => 'max-age=172800', 
      "Expires"  => gmdate("D, d M Y H:i:s T", strtotime("+5 years")), 
      'Metadata'  => array(
       'profile' => $localImage, 
      ), 
     )); 

मैं कैसे परिभाषित कर सकते हैं जहां इस फाइल को एक दिया निर्देशिका पर अपलोड किया जाना चाहिए: मैं हमेशा अपने बाल्टी के "निरपेक्ष पथ" इसलिए की तरह कुछ कर रही पर फ़ाइलों को अपलोड?

उत्तर

30

आपको उस जानकारी को "कुंजी" पैरामीटर में शामिल करना होगा। एस 3 वास्तव में एक फाइल सिस्टम नहीं है, यह एक बड़ी (हैश टेबल) एसोसिएटिव सरणी की तरह है। "बाल्टी" हैश तालिका का नाम है, और "कुंजी" कुंजी है (उदाहरण के लिए, $bucket[$key] = $content)। तो सभी पथ/निर्देशिका जानकारी "कुंजी" का हिस्सा होना चाहिए।

$localImage = '/Users/jim/Photos/summer-vacation/DP00342654.jpg'; 
$s3->putObject(array(
    'Bucket'  => 'my-uniquely-named-bucket', 
    'SourceFile' => $localImage, 
    'Key'  => 'photos/summer/' . basename($localImage) 
)); 
+0

कैसे मैं इस डिबग कर सकते हैं? वह फ़ाइल अपलोड की गई है या नहीं? – Vivek

3

धन्यवाद जेरेमी लिंडब्लॉम, यह मेरा पाइथन उदाहरण है जो मेरे लिए काम करता है।

import boto3 
s3 = boto3.resource('s3') 
data = open('/home/briansanchez/www/red-hat.jpg', 'rb') 
s3.Bucket('briansanchez').put_object(Key='www/red-hat.jpg', Body=data) 
0

एडब्ल्यूएस के नवीनतम एसडीके के अनुसार कोड अपडेट किया गया: -

$result = $s3->putObject(array(
    'Bucket' => 'bucket name of S3', 
    'Key' => 'pawan-trying', 
    'SourceFile' => 'local image path or document root image path ', 
    'ContentType' => 'image', 
    'ACL' => 'public-read', 
    'StorageClass' => 'REDUCED_REDUNDANCY', 
    'Metadata' => array(
     'param1' => 'value 1', 
     'param2' => 'value 2' 
    ) 
     )); 
संबंधित मुद्दे