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 コンソールには Metadata セクションの下にリストされています。Content-Disposition

AWS コンソールで手動で変更するContent-Dispositionと、ブラウザは期待どおりにファイルをダウンロードします。

では、値を S3 オブジェクトに正しく渡すにはどうすればよいでしょうか? メソッドを使用して渡すことはできますか?CopyObject()

4

1 に答える 1

11

操作はトリッキーです、CopyObjectIMO。あなたにとって欠けているパズルのピースはMetadataDirectiveパラメーターだと思います。次のことを試してください。

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

注: この投稿にあるコードは、バージョン 2.0 の Apache ライセンスの下でもライセンスされています。

于 2014-03-24T19:47:58.747 に答える