[cakephp] Controllerから直接ブラウザに画像をダウンロードさせる。

cakephpにおいて、何かのボタンを押したタイミングで画像をダウンロードさせる方法には、
サーバーサイドから直接画像を端末にダウンロードさせる方法や、
htmlのaタグに、download 属性をつける手法
生成した画像ブラウザで新しいタブとして開くなどの方法があります。

 

今回は1つめのcakephpした場合についてです。
実装はシンプルで、以下の通りです。



public function downloadimg(){
        $this->autoRender = false;
        $filepath = 'target/img/for/DownLoad.png';
        $save_name = 'demo.png';
        $this->response->file($filepath);
        $this->response->download($save_name);
    }


わざわざサーバー側で記述しなくても、上記のの方法が簡単に思えるかもしれませんが、
ブラウザのサポートに依存してaタグのdownload属性が効かないこともあります。
実際にIEやsafariでこの手法を確認して見た結果効きませんでした。

 

実際のブラウザ毎のサポート状態はこちらで確認できます。

スクリーンショット 2016-03-09 13.24.48

 

サポートするブラウザによって手法を検討してみてください。