繁体   English   中英

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

[英]S3 PHP SDK: copy_object() fails to update the header

当将标头选项包括到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'
    )
);

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

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

 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM