如何使用AWS PHP SDK v2和CopyObject设置Content-Disposition?

时间:2014-03-24 19:20:26

标签: php amazon-s3 aws-php-sdk

我使用AWS PHP SDK v2.x使用以下代码在S3存储桶之间复制对象:

<?php
try {
    self::$aws->copyObject(array(
        'Bucket'     => $target_bucket,
        'Key'        => $target_key,
        'CopySource' => $source_bucket . '/' . $source_key,
        'Content-Disposition' => 'attachment',
        //'Content-Disposition' => 'attachment; filename="' . basename($target_key) . '"'
        //'ContentDisposition' => 'attachment'
        //'ContentDisposition' => 'attachment; filename="' . basename($target_key) . '"'
    ));
} catch (Aws\S3\Exception\S3Exception $e) {
    echo 'error';
}

文件被复制到S3存储桶时没有任何错误,但是我无法设置Content-Disposition以强制浏览器下载文件而不是流式传输文件。我尝试了一些选项(上面已经说明),但似乎没什么用。

我甚至试图传递Metadata数组中的值,即使documentation另有说明,但AWS Console列出了元数据部分下的Content-Disposition

如果我手动更改AWS Console中的Content-Disposition,则浏览器会按预期下载文件。

那么,我该如何正确地将值传递给S3对象? 可以我使用CopyObject()方法传递它吗?

1 个答案:

答案 0 :(得分:8)

CopyObject操作很棘手,IMO。我认为你的谜题中缺少的是MetadataDirective参数。请尝试以下方法:

$s3Client->copyObject(array(
    'Bucket'     => $target_bucket,
    'Key'        => $target_key,
    'CopySource' => $source_bucket . '/' . $source_key,
    'ContentDisposition' => 'attachment; filename="'.basename($target_key).'"',
    'MetadataDirective'  => 'REPLACE',
));

注意:此帖中的代码也是在Apache许可证2.0版下获得许可的。