5

AWS PHP SDK で単純な ContentType メタデータを MultiPartUploader に追加する方法について、高低を検索しました。ドキュメントには、PutObject で行う方法が具体的に記載されていますが、MultiPartUploader で行う方法については言及されていません。

オンラインで見つけられるすべての方法を試しましたが、何も機能せず、ファイルは常に application/octet-stream に設定されています。

誰もこれについて経験がありますか?これが私のコードです:

$uploader = new MultipartUploader($this->s3, $local_path, [
    'bucket'      => env('AWS_BUCKET'),
    'key'         => $path .'/'. $filename,
    'contentType' => 'video/mp4',  //  have tried this
    'metaData'    => [             //  have tried this (all well as all variations of caps)
        'contentType' => 'video/mp4',
    ]
]);

do 
{
    try 
    {
        $result = $uploader->upload();
    } 
    catch (MultipartUploadException $e) 
    {
        $uploader = new MultipartUploader($this->s3, $local_path, [
            'state' => $e->getState(),
        ]);
    }
} 
while (!isset($result));

MultiPartUploader クラスを読んだ後、ContentType が自動的に設定されるように見えますが、設定されていません。

SDKのv3を使用しています

どんなアドバイスでも大歓迎です!

4

1 に答える 1

10

この質問を投稿した直後に私はそれを理解しました!他の誰かがこの問題に遭遇した場合は、ここで見ることができるように、回答を投稿します。

質問でリンクしたページには答えがありますが、特に ContentType とは関係ありません!

作業コードは次のとおりです。

$uploader = new \Aws\S3\MultipartUploader($this->s3, $local_path, [
    'bucket'      => env('AWS_BUCKET'),
    'key'         => $path .'/'. $filename,
    'before_initiate' => function(\Aws\Command $command) use ($mime_type)  //  HERE IS THE RELEVANT CODE
    {
        $command['ContentType'] = $mime_type;  //  video/mp4
    }
]);

do 
{
    try 
    {
        $result = $uploader->upload();
    } 
    catch (\Aws\Exception\MultipartUploadException $e) 
    {
        $uploader = new \Aws\S3\MultipartUploader($this->s3, $local_path, [
            'state' => $e->getState(),
        ]);
    }
} 
while (!isset($result));

return $result ? $result['ObjectURL'] : null;

これが将来誰かに役立つことを願っています!

于 2015-10-27T16:55:55.937 に答える