当copy_object包含标头选项时,标头不会更新。
头不得到更新,直到我使用update_object单独调用。我希望我做错了什么,但我已经测试了这4-5种不同的方法,甚至进入sdk代码戳。
这是一个bug吗?
我使用的是最新的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'
)
);
我自己也有这个问题,并在iamdev中解决了它。在疯狂了半天之后,我开始研究实际的API,而不仅仅是尝试使用它。
在sdk.class.php的第1690行中,您将看到以下内容:
if (isset($opt['metadataDirective']))
$opt['headers']['x-amz-metadata-directive'] = $opt['metadataDirective'];
unset($opt['metadataDirective']);
}
这意味着如果你不复制一个对象到它自己,它不会替换键,因此不会更新它。
对我有用的是在我的调用中显式地在我的选项中设置元数据指令,所以:
$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