コードを AWS PHP SDK1 から SDK2 ( https://github.com/aws/aws-sdk-php ) に移行しています。
画像アップローダーがあります。以前のバージョンでは、画像の Content-Type を次のように指定していました。
$response = $this->s3->create_object(
$bucket,
$key,
array(
'fileUpload'=>$file_resource,
'contentType'=>$mime,
'acl' => AmazonS3::ACL_PUBLIC,
)
);
これは私の新しいバージョンです:
$response = $this->s3->upload(
$bucket,
$key,
$file_resource,
'public-read',
array('params' => array('Metadata' => array('ContentType'=>$mime)))
);
ContentType のさまざまなスペルを試してみました。S3 サイトでは、名前が「x-amz-meta-contenttype」のように変更されますが、「Content-Type」の値はデフォルトの「binary/octet-stream」です。
私も EntityBody 機能を使用してみましたが、同じ結果:
$response = $this->s3->upload(
$this->bucket,
$to,
EntityBody::factory($file_resource),
'public-read',
array('params' => array('Metadata' => array('ContentType'=>$mime)))
);
この新しい API で content-type を設定するにはどうすればよいですか?
編集:ドキュメントのどこかに表示されます:
AWS SDK for PHP は、オブジェクトの保存に使用される最も適切な Content-Type ヘッダーを自動的に決定しようとします。あまり一般的でないファイル拡張子を使用していて、Content-Type ヘッダーが自動的に追加されない場合は、操作に ContentType オプションを渡すことで、Content-Type ヘッダーを追加できます。
まず、単純な画像をアップロードしていますが、私の S3 ダッシュボードによると、それらは「binary/octet-stream」としてアップロードされています。2 番目の点については、「ContentType」を使用して配列の多くの組み合わせを試しましたが、なぜ機能しないのかわかりません...