メディアビューで、画像をクライアントに返そうと思い、仕様通りに記述したのですが、ブラウザで確認した所、画面が真っ白になって何も起きませんでした。
・filesというディレクトリはapp直下になります。
・ブラウザから直で
http://domain/dir_name/controller_name/download
とアクセスしました。
何か少しでも情報をお持ちの方ご教授願いますm(_ _)m
ソースは以下になります。
function download() {
$filename = 'test.png'; // とりあえず固定値
$name = 'test';
// 拡張子を取得する。
$pos = strrpos($filename,'.');
$ext = substr($filename, $pos + 1);
$this->view = 'Media';
$params = array(
'id' => $filename,
'name' => $name,
'download' => true,
'extension' => $ext,
'path' => 'files' . DS
);
$this->set($params);
}
【追記】
メディアビューを使わず記述したら出力する事が出来ましたが、
ファイルが破損していて表示できませんでした。
最悪、メディアビューなしで出力できればいいのですが…。
$filename = 'test.png'; // とりあえず固定値
$path= 'files' . DS;
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Length: '.filesize($path));
header('Content-Type: application/octet-stream');
readfile($path);
下記のようにメディアビュークラスを使用するようにしていますか?
ご確認ください。
class HogeController extends AppController { function download() { $filename = 'test.png'; // とりあえず固定値 $name = 'test'; // 拡張子を取得する。 $pos = strrpos($filename, '.'); $ext = substr($filename, $pos + 1); $this->view = 'Media'; $params = array( 'id' => $filename, 'name' => $name, 'download' => true, 'extension' => $ext, 'path' => 'files' . DS ); $this->set($params); } }
はい、問題ありません。
追記として書いたphpのソースはパスが違うだけでした。
お騒がせしました。
ただ、cakePHPでの出力に関してはいまだ解決しておりません。