0

自分のサイトでファイルをアップロードおよびダウンロードする機能を作成しました。しかし、ダウンロード機能を検証したいと思います。ユーザーがすでに自分のサイトにログインしていてダウンロードの許可を与えられている場合、ユーザーがファイルをダウンロードできるようにしたい。

助けて。セッションがそこにあるかどうかを確認するにはどうすればよいですか?/ app / webroot / document /users/パスにファイルをアップロードしています。

生成されたダウンロードリンクは次のようになります:http://localhost/my_project/documents/users/TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg

皆さん、ありがとうございました。

4

3 に答える 3

0

あなたが彼らに直接ダウンロードリンクを与えないように、私はおそらく何かを設定するでしょう。私は通常、download()メソッドを使用してAttachmentsControllerを設定します。次に、必要なすべてのアクセス許可チェックを実行できます(ファイルの統計などを保持します)

于 2010-08-11T17:21:11.750 に答える
0

その場合、ダウンロードを有効にする前に、コントローラーにセッション変数をチェックさせることができます。
セッションコンポーネントを使用している場合は、次のような方法を使用して、ユーザーアクションでユーザーのステータスを確認できます。

if($this->Session->read('Auth.User.id'))
{
//download file
}

ただし、ファイルをどのように提供するかはあなた次第ですが、そのセッションチェックは、Travis LeleuのAttachmentsControllerなど、ファイルの提供に使用するものすべての内部で機能する必要があります。

于 2010-08-11T20:41:23.780 に答える
0

これに対処する最も簡単な方法は、認証にAuthComponentを使用し、ページの「このファイルをダウンロード」リンクからのダウンロードプロンプトを処理するためにMediaViewを使用することです。

例。

class SomeController extends AppController {
    ...
    public $components = array(
        'Auth' => array(
            ... auth settings ...
        ),
        ...
    );

    public function download( ){
        $this->view = 'Media';
        $this->set( array(
          'id' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg',
          'name' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx',
          'download' => true,
          'extension' => 'jpg',
          'path' => join( DS, array(
              APP, 'webroot', 'documents', 'users', ''
          ))
        ));
    }

これは、AuthComponentに関して制限されたアクションとしてダウンロードアクションがあることを前提としています。ダウンロードアクションを許可している場合は、MediaViewコードをAuth-> user()チェックでラップすることができます。

    public function download( ){
        if( $this->Auth->user( )){
            $this->view = 'Media';
            $this->set( array(
              'id' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg',
              'name' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx',
              'download' => true,
              'extension' => 'jpg',
              'path' => join( DS, array(
                  APP, 'webroot', 'documents', 'users', ''
              ))
            ));
        } else {
            ... do something else here ...
        }
    }

これは、Authに有効なUserオブジェクトがセッションに保存されていることを確認するだけです。これは、ユーザーがログインしている場合にのみ発生します。

いくつかのメモ:

join(DS、array('path'、'parts'、'')呼び出しの最後に空白の配列エントリを使用して、パスに必要な末尾のスラッシュを取得します。必要に応じて実行してください-私は部分的に参加しています繰り返しの文字列やパスを作成するときは自分自身。

http://book.cakephp.org/view/489/Media-Views
http://book.cakephp.org/view/563/Setting-Auth-Component-Variables

于 2010-08-12T19:12:28.833 に答える