S3 PHP SDK: copy_object () не может обновить заголовок - PullRequest
1 голос
/ 06 октября 2011

При включении параметров заголовка в 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 Ответ

5 голосов
/ 16 марта 2012

Я сам столкнулся с этой проблемой и решил ее.Примерно через полдня сойти с ума, я начал смотреть на настоящий 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',
 );

Надеюсь, это работает для вас, хотя это старый пост, и вы, вероятно, нашли обходной путь.

Best, HG

...