- 2010-08-20 (金) 17:55
- JavaScript | PHP
JPEGとかPNGとかの画像をダウンロードさせるページを作っていたのですが、 aタグのhrefに画像のパスを書いても、対象の画像に遷移して困ってしまいました。 ZIP等をダウンロードするときみたいに確認ダイアログを出したかったので、 色々調べてみました。
perlやPHPでファイルのダウンロード確認ダイアログを表示させる方法 | perl/CGI | 阿部辰也のブログ――人生はひまつぶし。
ここのPHPのソースを一部改変してJSからドーンします。
<? $files = $_GET; $src = "./hoge/{$files['filename']}";</p> <h1>HTTPヘッダを送信</h1> <p>if(file_exists($src)){ header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"{$files['filename']}\"");</p> <h1>出力</h1> <p>readfile($src); }else{ header("Location: ./fuga.html"); } ?>
header(“Content-Disposition: attachment; filename=\”{$files['filename']}\”"); ここの記述でダイアログを表示させる(ついでにファイル名を決めることができる)ようですが、 セキュリティ的に問題もある模様。 [Studying HTTP] HTTP Header Fields
あと、ファイルによってMIMEタイプ(Content-Type)が異なるので、それもなんとかしなければならず。 PHP の mime_content_type() を使おうとするも非推奨とのことで断念。 とりあえず application/octet-stream とすることで回避(と言えるのかわかりませんが)しました。
で、このPHPをJSから叩く
$('a.download').click(function(e){ e.preventDefault(); var filename = ($(this).attr('href')).split('/'); filename = filename[filename.length-1]; location.href = './fuga.php?filename='+filename; });firebug とかで href 書き換えられて押されたりすると怖いので、 ファイル名の部分だけを切り取って送るようにしました。
ここまでできたので、今度は欲しい画像を選んでZIPに圧縮してダウンロード、とか作りたいのですが。 さぁ、時間が無い。
■おまけ application/octet-stream とはなんぞ web用語辞典 – application/octet-stream
なんだかわからないけど何かのファイル っていう意味っぽいです。
Comments:0
Trackbacks:0
- Trackback URL for this entry
- https://unolabo.boo.jp/archives/2010/08/20-%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89%e6%99%82%e3%81%ab%e3%83%80%e3%82%a4%e3%82%a2%e3%83%ad%e3%82%b0%e3%82%92%e8%a1%a8%e7%a4%ba.html/trackback
- Listed below are links to weblogs that reference
- 【PHP】ファイルをダウンロードするときに確認ダイアログを表示する from うのらぼ。