6

コードを 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」を使用して配列の多くの組み合わせを試しましたが、なぜ機能しないのかわかりません...

4

3 に答える 3

16

最後に、この一連のオプションが機能しました。

array('params' => array('ContentType' => $mime))

メタデータは不要

于 2014-02-21T06:21:56.600 に答える
4
  1. AWS\S3\S3Client::putObject()を直接使用すると、必要な制御が確実に得られます。

  2. 自動検出を機能させるには、ファイル拡張子を小文字にする必要があります。

  3. サポートされている MIME タイプのリストはGuzzle\Http\Mimetypesにあります。

于 2014-02-20T09:40:23.633 に答える