我使用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()
方法传递它吗?
答案 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版下获得许可的。