在上载目录时将Metada和选项添加到S3对象

时间:2016-01-05 01:52:36

标签: php amazon-web-services amazon-s3

我使用->uploadDirectory()成功将文件夹上传到S3。数百个文件夹中包含100个或1000个图像,因此对每个文件使用PutObject()几乎没有意义。上传工作正常,但ACL,StorageClass和元数据在上传中包含

根据http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html#uploading-a-directory-to-a-bucket的文档,以下代码完成此操作。进一步记录了putObject()函数,也被引用。

除了目录和存储桶之外,我找不到任何使用此功能的示例,因此无法看到它可能出现的问题。有关为什么$options中的数据被忽略的任何想法?

$aws = Aws::factory('config.php');
$s3 = $aws->get('S3');
$dir = 'c:\myfolder\myfiles';
$bucket = 'mybucket;
$keyPrefix = "ABC/myfiles/";
$options = array(
    'ACL' => 'public-read',
    'StorageClass' => 'REDUCED_REDUNDANCY',
    'Metadata'=> array(
        'MyVal1'=>'Something',
        'MyVal2'=>'Something else'
    )
);

$result = $s3->uploadDirectory($dir, $bucket, $keyPrefix, $options);

1 个答案:

答案 0 :(得分:0)

要提供给putObjectcreateMultipartUpload的参数应位于params选项中,而不是作为options数组中的顶级值提供。尝试按如下方式声明您的选项:

$options = array(
    'params' => array(
        'ACL' => 'public-read',
        'StorageClass' => 'REDUCED_REDUNDANCY',
        'Metadata'=> array(
            'MyVal1'=>'Something',
            'MyVal2'=>'Something else',
        ),
    ),
);