2011-10-06 61 views
1

將標頭選項包含到copy_object時,標頭不會更新。S3 PHP SDK:copy_object()無法更新標頭

只有在使用update_object進行單獨調用之後,才能更新標頭。我希望我做錯了什麼,但是我已經測試了這4-5種不同的方式,甚至可以進入sdk代碼來查找。

這是一個錯誤?

我使用的是最新的1.4.3 SDK

這裏是我的電話:

$amazonS3->copy_object( 
    array(//Source 
     'bucket' => SOURCE_BUCKET, 
     'filename' => $source_file 
    ), 
    array(//Target 
     'bucket' => VIDEO_BUCKET, 
     'filename' => $dest_file, 
    ), 
    array(//Options 
     'acl' => AmazonS3::ACL_PRIVATE, 
     'headers' => array(
     'Content-Type' => 'application/octet-stream', 
     'Content-Disposition' => 'attachment' 
    ) 
); 

回答

5

我有這個問題我和解決它iamdev。經過大約半天的瘋狂之後,我開始考慮實際的API,而不是僅僅嘗試使用它。

在sdk.class.php,上線1690,你會看到以下內容:

if (isset($opt['metadataDirective'])) 
$opt['headers']['x-amz-metadata-directive'] = $opt['metadataDirective']; 
unset($opt['metadataDirective']); 
} 

這意味着如果你沒有抄襲的對象本身,它不會取代鑰匙,因此不更新它。

什麼工作對我來說是顯式設置metadataDirective我OPTS在我的電話,所以:

$amazonS3->copy_object( 
    array(//Source 
    'bucket' => SOURCE_BUCKET, 
    'filename' => $source_file 
), 
array(//Target 
     'bucket' => VIDEO_BUCKET, 
     'filename' => $dest_file, 
), 
array(//Options 
     'acl' => AmazonS3::ACL_PRIVATE, 
     'headers' => array(
     'Content-Type' => 'application/octet-stream', 
     'Content-Disposition' => 'attachment' 
), 
'metadataDirective' => 'REPLACE', 
); 

希望這對你的作品,雖然這是一個古老的職位,你可能已經找到了一個解決方法。

最好, HG

+0

不錯,謝謝!我通過簡單地額外打電話來更新標題,但我很快就會回到該代碼中,我一定會使用您的想法。 – iamdev

+0

你剛剛救了我的夜晚! ;) 謝謝! –