2013-04-08 6 views
5

私は今、2日以上解決しようとしている問題に遭遇しました:cakephpを使用してウェブサイトを構築しましたが、すべてうまくいっていますが、ダウンロードを実装しようとしたAPP_DIR/someFolder/someFile.zipの下に保存されたファイルへのリンク。cakephpファイルのダウンロードリンク

someFolderのファイルにダウンロードリンクを設定するにはどうすればよいですか?私はしばしば "Media Views"を見つけ出しました。私はそれらを実装しようとしましたが、今まで私は失敗しました。

さらに、ファイルをダウンロードするための簡単な方法はありませんか?

+0

Apacheを使用している場合は、「ダウンロード」ディレクトリ内の '.htaccess'を追加することにより、ダウンロードを強制することができます

ここでは、古いバージョンの同じ方法です。いくつかの例をここに見てください:http://www.givegoodweb.com/post/30/forcing-a-download-with-apache-and-htaccess and http://www.timewasters-place.com/how-to-force -file-downloading-with-htaccess/PHPでダウンロードするファイルを提供する必要はありません – thaJeztah

+0

APP_DIR/webroot/someFolder /に配置する方法は? – SaidbakR

+0

@sємsємあなたはそうです(ファイルがウェブルートにないことに気付かなかった)。パブリックディレクトリに置くだけで自動的にはダウンロードされません(たとえば、ファイルがJPGの場合)。 'ダウンロード'ヘッダーを送信する.htaccessを追加すると、ブラウザ内でファイルを見るのではなく、ファイルを簡単にダウンロードできるようになります。 PHPを見ることは可能ですが(下記の答えを参照してください)、これは必ずしも大規模なファイルでは必ずしも理想的ではありません。 – thaJeztah

答えて

15

メディアビューはバージョン2.3以降で非推奨です。代わりにSending filesを使用してください。

は、あなたのコントローラでは、この最小限の例をチェックアウト:

public function download($id) { 
    $path = $this->YourModel->aMagicFunctionThatReturnsThePathToYourFile($id); 
    $this->response->file($path, array(
     'download' => true, 
     'name' => 'the name of the file as it should appear on the client\'s computer', 
    )); 
    return $this->response; 
} 

$this->response->fileの最初のパラメータは、あなたのAPPディレクトリに対する相対パスです。したがって、$this->response->file('someFolder' . DS . 'someFile.zip')を呼び出すと、ファイルAPP/someFolder/someFile.zipがダウンロードされます。

「ファイルを送信する」には、少なくともCakePHPバージョン2.0が必要です。また、上記のCookbookのリンクを見てみることをお勧めします。


あなたはすでにあなたの質問で述べたように、あなたがメディアビューを使用する必要がありますCakePHPの古いバージョンを実行している場合。このコードを使用し、Media Views (Cookbook)を参照してください。

public function download($id) { 
    $this->viewClass = 'Media'; 
    $path = $this->YourModel->aMagicFunctionThatReturnsThePathToYourFile($id); 
    // in this example $path should hold the filename but a trailing slash 
    $params = array(
     'id' => 'someFile.zip', 
     'name' => 'the name of the file as it should appear on the client\'s computer', 
     'download' => true, 
     'extension' => 'zip', 
     'path' => $path 
    ); 
    $this->set($params); 
} 
+0

hmm ...私はそれを記述した方法で実装しましたが、私はgettiingしています: 未定義のメソッドを呼び出すCakeResponse :: files()... 私はドキュメンテーションでそれを探しましたが、fileしかしidはダウンロード方法を見つけましたが、私はそれをEtherと動作させることはできません。:( –

+0

@sємsєм:可能であればWebrootの外に置いておきたいです...それは感覚データではありませんが、そこにはwoleの世界をコピーしてarroundをグラブするために... –

+0

@MichaelHofmair:どのCakePHPバージョンを使用しますか?私の答えで述べたように、あなたは少なくともCakePHPバージョン2.0が必要ですが、私は私の答えを編集し、 。 – Jan

関連する問題