S3 PHP SDK:copy_object()无法更新标头

时间:2011-10-06 16:59:30

标签: php sdk amazon-s3 amazon-web-services

将标题选项包含在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'
    )
);

1 个答案:

答案 0 :(得分:5)

我自己遇到了这个问题并解决了它iamdev。经过大约半天的疯狂之后,我开始关注实际的API,而不仅仅是尝试使用它。

在第1690行的sdk.class.php中,您将看到以下内容:

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

这意味着如果您没有将对象复制到自身,它将不会替换密钥,因此不会更新它。

对我有用的是在我的调用中明确设置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