2015-10-27 1 views
2

J'ai recherché haut et bas pour savoir comment ajouter une simple méta-données ContentType à un MultiPartUploader dans AWS PHP SDK. Les docs mentionnent spécifiquement comment le faire pour PutObject, mais ne mentionnent pas comment le faire avec un MultiPartUploader.Comment ajouter ContentType à AWS PHP SDK MultiPartUploader

J'ai essayé toutes les méthodes que j'ai pu trouver en ligne, mais rien ne fonctionne et mon fichier est toujours défini sur application/octet-stream.

Quelqu'un a-t-il une expérience avec ceci? Voici mon code:

$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)); 

Après avoir lu la classe MultiPartUploader, il semble que le ContentType doit être automatiquement, mais il n'est pas défini.

J'utilise v3 of the SDK

Tout conseil serait grandement apprécié!

Répondre

5

Je l'ai compris juste après avoir posté cette question! Je posterai la réponse de sorte que si quelqu'un d'autre rencontre ce problème, ils peuvent regarder ici.

La page que j'ai liée dans la question a la réponse, mais pas spécifiquement liée à ContentType!

Voici le code de travail:

$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; 

J'espère que cela aide quelqu'un d'autre à l'avenir!

+0

J'étais sur le point de répondre avec une réponse similaire (et un lien vers http://docs.aws.amazon.com/aws-sdk-php/v3/guide/service/s3-multipart-upload.html#customizing -a-multipart-upload). Vous devriez accepter cette réponse. – giaour