- ベストアンサー
jpg画像をブラウザで表示ではなくダウンロードさせる方法
http://code.nanigac.com/source/view/461 jpg画像を、ブラウザで表示ではなくダウンロードさせる方法を探していて上記ページにたどり着きました。 上記の例ですと「<a href="download.php?file=test.jpg">」といったようにHTML側に余分な記述が必要になります。 これを「<a href="test.jpg">」というようにシンプルに出来ないでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>octet-stream属性が常につくと、どのようにまずいのでしょうか。 やっていることはMIMEの偽装です。トラブルの元になります。 かといって今回のようなシステムがどうしても必要であれば お勧めはできなくても、やってはいけないとまでは強制できません。 リスクがあることを理解した上で運用してください。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>こちらは以前試しました 微妙にずれてますね・・・ まず.htaccessの書き方に工夫が必要です。 RewriteEngine On RewriteRule .*\.jpg? download.php?img=$0 こうしておいて、download.phpを以下のようにします。 <? $img=$_GET["img"]; if(!file_exists($img)){ print "no data"; exit; }; header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"{$img}\""); readfile($img); ?> 場合によっては、!file_exists($img)以下の処理は nodata.jpgなどダミーファイルを読むようにしてもいいかも しれませんね。 で、これを呼び出すファイルをつくってテストしてみてください。 1.jpgを用意して、2.jpgを用意しないようにすればわかりやすい と思います test.htm <img src="1.jpg"> <img src="2.jpg"> <a href="1.jpg">1</a> <a href="2.jpg">2</a>
お礼
>微妙にずれてますね・・・ 失礼いたしました。早とちりでした。 教えていただいた事を試したところ、うまくいきました! ありがとうございます! >octet-stream属性がついてしまうので、とてもお勧めできる方法では ありません。 すみません。後学のために教えていただきたいのですが、 octet-stream属性が常につくと、どのようにまずいのでしょうか。 よろしくお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
>「<a href="test.jpg">」というよう .htaccessなどで読み替えてやればできないことはないでしょう。 ただこれをやってしまうと、jpgのヘッダーに常に octet-stream属性がついてしまうので、とてもお勧めできる方法では ありません。
補足
>.htaccessなどで読み替えてやればできないことはないでしょう。 こちらは以前試しましたが、ほとんどのブラウザでまともに動いてくれませんでした。 http://faq.creasus.net/04/0606/
お礼
>やっていることはMIMEの偽装です。トラブルの元になります。 なるほど。了解しました。 ご回答、ありがとうございました。助かりました!