2

現在、AmazonS3アカウントからファイルをダウンロードするために次のコードを使用しています。

if(isset($_POST['file_name'])) {
$bucket = $_POST['bucket'];
$fname = $_POST['file_name'];
$accessKey = 'AKIAIEHFBME6F5Q62FTQ';
$secretKey = '<REMOVED>';
$file_type = pathinfo($fname, PATHINFO_EXTENSION);

$mp3_url = el_s3_getTemporaryMP3Link($accessKey, $secretKey, $bucket, $fname);    
$zip_url = el_s3_getTemporaryZipLink($accessKey, $secretKey, $bucket, $fname);


if ($file_type === "mp3") {
    header('Content-type: audio/mpeg3');
    header('Content-Disposition: attachment; filename="themixtapesite_'.$fname.'"');
    readfile($mp3_url);
    exit();
} else if ($file_type === "zip") {
    header('Content-type: application/zip');
    header('Content-Disposition: attachment; filename="themixtapesite_'.$fname.'"');
    readfile($zip_url);
    exit();
} else {
    echo "Sorry, File does not exist";
}

}

ご覧のとおり、ファイル拡張子が何であるかを確認してから、関連するURLをに渡します。read file()

S3を使用する私の全体的なポイントは、EC2サーバーの負荷を軽減することです。ただし、この方法を使用して、EC2サーバーを介してS3からファイルをプルするファイルをダウンロードしているようです(iStatを介してサーバーの負荷を監視すると、ファイルをダウンロードするときのアクティビティが増加します)。

これを行う別の方法はありますか?ファイルがEC2サーバー経由ではなくS3から直接ダウンロードされるようにしますか?

更新:簡単な更新-私はApacheではなくNginxを使用しているので、誰かがそれを提案しようと考えている場合は.htaccessはありません。

4

1 に答える 1

1

公的にアクセス可能なURL、または署名されたURLがある場合。ロケーションリダイレクトを使用して、それをクライアントに直接渡すことができます。

header('Location: ' . $myUrl);

于 2013-02-21T17:54:53.393 に答える