2

some_controller私は、人がファイルをダウンロードできるようにする2つのアクションをコントローラーに記述しました。手順は次のようになります。

  1. ユーザーはsome_controller/export_dataフォームに移動してクリックし、テキストファイルを生成します。
  2. 次に、アクションexport_data()はユーザーのテキストファイルを書き込みます。
  3. ファイルが生成されたことが検出されると、ユーザーがクリックしてメディアビューからファイルをダウンロードするための別のボタンが表示されます。このアクションはsome_controller/download_fileです。

some_controller/download_file私の質問は、ユーザーが手動でアクセスできないようにするにはどうすればよいですか?つまり、ユーザーがこのURLをブラウザに入力してファイルをダウンロードできないようにしたいのです。設定protected function _download_file()してみましたが、ビューがのアクションにアクセスできなくなりますsome_controller

私はこれに間違った方法でアプローチしているように感じます。誰かが私にいくつかの指示を与えたいですか?

4

2 に答える 2

2

ユーザーがgenerate a text fileボタンをクリックしたとき:

  1. 実際にはsome_controller/export_data、セッション変数を設定します

  2. 実際にはsome_controller/download_file、最初にそのセッション変数を確認してください。

  3. 設定されている場合は、ユーザーがファイルをダウンロードしてセッションを破棄できるようにします。

  4. そうでない場合は、ファイルのダウンロードを許可してください。

このようにして、some_controller/download_file publicアクセスを割り当てることができます。

ユーザーが直接アクセスする場合some_controller/download_file action、セッション変数は存在せず、ファイルをダウンロードできません。

于 2013-02-09T07:03:03.617 に答える
1

ユーザーがダウンロード ボタンをクリックしたときにアクションが必要になるため、アクションを保護できません。あなたができる最善のことはそれを守ることであり、それは完全に受け入れられます. たとえば、次のことができます。

  1. export_data で、ファイルを表すランダム キー (つまり 1234) を生成します。
  2. ボタンが表示されると、URL にはファイルを表すキーが含まれます (つまり、../some_controller/download_file?key=1234)。
  3. download_file で、キーが存在し、ダウンロードの準備ができているファイルを表していることを確認します。キーが正しい場合はファイルを渡し、そうでない場合はエラー メッセージを表示します。
于 2013-02-09T15:34:49.537 に答える