1

ZFアプリケーションがログインしているユーザーに吐き出すことができるアップロードされたドキュメントを含むフォルダーがあります。のようなリンクを使用しhttp://server/documents/filename.pdfてファイルをダウンロードできるようにしたいのですがDocumentsController、既存のユーザーCookieがログインしていて、ファイルをダウンロードする権限があることを確認できるコントローラーが必要です。http://server/documents/index/id/1ひどいオプションではありませんが、必要がない場合のようにURLを使用する必要はありません。

4

2 に答える 2

3

X-SendFileを使用して、最高のパフォーマンスを得ることができます。Apache(mod_xsendfile)、Lighttpd、Nginxでサポートされています。リクエストは、最初に特別なヘッダー(Nginxの場合はX-SendfileまたはX-Accel-Redirect)を配置するphpプロセスによって処理され、スクリプトが終了すると、Webサーバーが引き継いで静的ファイルのようにファイルを送信します。それはより速く、より少ないメモリを使用します。

すべてのリクエストをコントローラーにリダイレクトするには、ブートストラップにカスタムルートを作成する必要があります。

protected function _initRouter()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();

    $documentRoute = new Zend_Controller_Router_Route(
        'document/:filename',
        array(
            'action'     => 'xsendfile',
            'controller' => 'documents'
        ),
        array(
            'filename' => '\..+$'
        )
    );
    $router->addRoute('document', $documentRoute );

    return $router;
}

このアクションヘルパーを使用して、x-sendfileヘッダーを処理できます:http ://www.zfsnippets.com/snippets/view/id/27そして、ユーザーが認証されているかどうかを確認するためのコードが必要です。

于 2010-10-05T08:11:08.267 に答える
0

Zend_Aclを使用してへのアクセスを制御してから、にリダイレクトするカスタムルートを作成するDocumentsController必要があります。http://server/documents/*http://server/documents/index/id/*

編集:

Tomášによって提案されたソリューションは、より大きなファイルに対してより適切に機能します。

于 2010-10-04T18:44:22.620 に答える