1

アプリケーションの相対アドレスであるwebroot/filesでファイルのアップロードを実行するように調整しました

次に、アップロードしたファイルを強制的にダウンロードする必要があります。いくつかのグーグルとこの投稿からの提案のほとんどのように試した後、私はこれを行う正しい方法がcakephpsメディアビューを使用することであると考えました

私が持っているもの:

  1. レコードのテーブルがあるメインサイト。モデル->記録; テーブル->レコード;
  2. これらのレコードには、主キーrecord_idがあります。
  3. 私のデータベースには、テーブル->ファイルがあります。モデル->ファイル;
  4. これらのファイルには、外部キーrecord_idと、その場所への相対パスを含むフィールド「url」があります。
  5. ファイルを含むレコードを作成した後、ファイルはフォルダーに正しくアップロードされます。このフォルダーの相対アドレスは、たとえばwebroot / files / record_name / fileであり、データベース内のテーブルは正しく更新されます。

私がやりたいこと:

  1. 1つのテーブル行をダブルクリックした後、レコードに関する情報を含むモーダルダイアログを開きます。(終わり)
  2. このモーダルダイアログでは、これらのファイルを強制的にダウンロードするリンクを表示したいと思います。

私はこれの多くのバリエーションを試しました:

//the retrieving of data after debug looks fine//
$this->loadModel('File');
$files = $this->File->find('list', array(
    'conditions'=>array('File.record_id'=>$record_id),
    'fields' => array('File.Name', 'File.Url');
))

//actual display of url
foreach($files as $file_name => $file_url) {
    echo $this->Html->link($file_name, $file_url);
}

結果のリンクは、JamesRevilliniが提示したとおりに表示されます

これが私の実際の質問です

その問題は完全には解決されなかったので、私だけでなく、この問題の迅速な解決策を探している人にとって、メディアビューがどのように機能するかについての簡単なデモンストレーションを見ることが役立つと思いました。動的ダウンロード機能を作成した後、どこに移動するかわかりません。

    public function download($name, $path) {
    $this->viewClass = 'Media';
    $params = array(
        'id'        => $name,
        'name'      => $name,
        'download'  => true,
        'path'      => $path
        );
        $this->set($params);
    }
4

1 に答える 1

1

リソースのモーダル ダイアログ内のリンクをdownload()関数に向けます。

Record.idをその関数に渡します。その中でファイルを見つけて自動レンダリングします。

それはうまくいくはずです。

于 2012-11-20T07:51:16.153 に答える