1

我正在使用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数组中的值,但AWS 控制台列出了元数据部分下的值。Content-Disposition

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

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

4

1 回答 1

11

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 版下获得许可的。

于 2014-03-24T19:47:58.747 回答