如何将ContentType添加到AWS PHP SDK MultiPartUploader

时间:2015-10-27 16:46:11

标签: php amazon-web-services aws-php-sdk

我已经搜索了如何将简单的ContentType元数据添加到AWS PHP SDK中的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,但它没有被设置。

我正在使用v3 of the SDK

非常感谢任何建议!

1 个答案:

答案 0 :(得分:5)

在我发布这个问题之后我发现了它!我会发布答案,以便如果有其​​他人遇到这个问题,他们可以看看这里。

我在问题中链接的页面有答案,与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;

我希望将来可以帮助其他人!