S3に既に配置済みのファイルのContent-Typeを変更する際に苦戦したので、自分用のメモ
結論
copyObject
を使用する際に、オプションでContentType
, MetadataDirective
の2つを指定する。
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);
$s3->copyObject([
'Bucket' => $targetBucket,
'Key' => "{$sourceKeyname}-copy",
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
'ContentType' => 'binary/octet-stream', // ※
'MetadataDirective' => 'REPLACE', // ※
]);
MetadataDirective:REPLACE
を指定しないと、S3に配置されている元ファイルのContent-Typeを引き継ぐみたいなので注意