【问题标题】:S3 PHP SDK: copy_object() fails to update the headerS3 PHP SDK:copy_object() 无法更新标头
【发布时间】:2011-12-02 10:22:57
【问题描述】:

当在 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'
    )
);

【问题讨论】:

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


    【解决方案1】:

    我自己遇到了这个问题,并通过 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',
     );
    

    希望这对您有用,尽管这是一篇旧帖子,您可能已经找到了解决方法。

    最好, 汞

    【讨论】:

    • 很好,谢谢!我只是通过额外调用来更新标头来解决问题,但我很快就会回到那个代码中,我一定会使用你的想法。
    • 你刚刚拯救了我的夜晚! ;) 谢谢!
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2022-01-14
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多