上传目录时向S3对象添加Metada和Options


Adding Metada and Options to S3 Objects when uploading a directory

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

根据上的文档http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html#uploading-a-directory-to-packet,下面的代码应该实现了这一点。还引用了putObject()函数对其进行了进一步的证明。

除了目录和bucket之外,我找不到这个函数的例子,所以我看不出它可能有什么问题。你知道为什么$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);
要提供给putObjectcreateMultipartUpload的参数应在params选项中,而不是作为选项数组中的顶级值提供。尝试如下声明您的选项:
$options = array(
    'params' => array(
        'ACL' => 'public-read',
        'StorageClass' => 'REDUCED_REDUNDANCY',
        'Metadata'=> array(
            'MyVal1'=>'Something',
            'MyVal2'=>'Something else',
        ),
    ),
);