2011-11-08 33 views
0

私のアプリケーションでは、大きなメディアファイルを保存するためにZend_Service_Amazon_S3を使用しています。ユーザーがファイルをダウンロードすると、アプリケーションはまずそのファイルをローカルサーバーにコピーし、そこからファイルを強制的にダウンロードするいくつかのヘッダーとともに、ブラウザーに送信します。S3からブラウザにファイルをストリーミングする方法は?

ファイル全体をローカルサーバーにコピーすることなく、Amazonがブラウザに直接ファイルをストリームできるようにする方法はありますか?理想的には、アプリケーションはまだダウンロードされたフォースの名前を選択できます(多くの場合、Amazonのファイルと同じではありません)。

答えて

2

解決策の1つは、Amazon S3へのリクエストをプロキシするリバースプロキシサーバーを使用することですが、レスポンスヘッダーを書き換えてファイル名を変更し、ダウンロードを強制します。

これにより、そのファイルのローカルコピーを作成する必要はなくなりますが、実際のデータ転送は引き続きサーバーを通過します。

Nginxについては、具体的にはproxy_passadd_headerの設定オプションを調べることをおすすめします。


別の解決策は、(あなたがあなたのサーバーに転送する必要はありませんので、PUTオブジェクトのコピーの呼び出しを使用して)S3にファイルの一時的なコピーを作成することで、その後のContent-TypeとContentを設定します - 強制的にダウンロードするオブジェクトのヘッダ。

これらのファイルをS3からクライアントのブラウザに直接ストリーミングすることはできますが、ダウンロードが完了すると自動的に削除されないため、S3でそれらのファイルを定期的にクリーニングする必要があります。

+0

ありがとうございました。オブジェクト上にcontent-TypeヘッダーとContent-Dispositionヘッダーを設定し、amazonリンクを使用してユーザーがAmazonから直接ファイルをダウンロードできるようにしました – murze

関連する問題