- ベストアンサー
アンカーでダウンロード?
本当はエクセルのファイルなんですけど、 勘違いから以下のようなコードを組んでしまいました。 <a href="hoge/test.zip">test</a> そうしたら偶然にもダウンロードの表示がされることが分かりました。 こういう使い方もできるのかと思いながら、 いつもの如くこのサイトを検索していたら以下のFAQを見つけました。 http://okwave.jp/qa/q5333524.html 私と全く同じことをしているのですが、 こちらの回答ではいずれもHTMLだけでは厳しいというものでした。 ひょっとして私のやっていることは仕様的には誤りなのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とんでもない誤解をされています。 本来、それがどのようなデータであれ、サーバーからファイルを提供するときにファイルの実体より前に、改行を二個はさんで、HTTP応答ヘッダが送られてきます。 firefoxにLive HTTP Headerというアドオンがありますが、それを使うとブラウザとサーバー間でどのようなやり取りをしているかわかります。 その応答ヘッダで、 content-type:application/octet-stream が指定されていると、ファイルの種類に関わらず、ダウンロードするべきです。 あなたのウェブサイトに「download」というフォルダーを作成し、そこに AddType application/octet-stream * と記述した .htaccess というファイルを置いておけば、そのファイルがabc.htmlだろうと、abc.hogeだろうと、すべてダウンロードされるべきです。 メモ帳で作成するときは名前をつけて保存で".htaccess"と""で括らないと、ファイル名のないファイルは保存できません。 では、なぜ、exeや、zip がダウンロードされるかと言うと、サーバーの設定で、これらの拡張子を持つファイルは、application/octet-streamと指定されているからに過ぎません。ここを間違えないように・・ ただ、Windowsは、他のOS--UNIX,Linux,Macなどと異なり、ファイルの拡張子で動作を決める--ルール違反の仕様なので、たとえサーバーからそのような応答ヘッダが付けられていても、htmlなら、ブラウザで起動しようとするバグがありました。(現在走りません) .zipがダウンロードされるのは偶然でもなんでもなくて、サーバーとあなたのブラウザの設定がそのように指定されているからで、すべての人に有効なわけではありません。Windows(とIE)だけが、特殊なので、たまたまそのように動作するだけです。
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
そちらとは事情が違いますので。 通常、アンカーをクリックした場合 ・その先がhtmlだったら、そのページをブラウザで表示する ・その先がzip等のバイナリファイルだったらダウンロードする という動作をするのが普通でしょう。 これが逆だと、次のページに飛ぶたびにダウンロードになって、zipをダウンロードしようとすれば画面にわけのわからない文字が表示される、という事態になります。 その質問の場合は、表示されるはずのhtmlをダウンロードさせるようにする、という通常とは違うことをしたい、というものだったので、htmlでは難しい、が回答になっているものです。 ついでに言えば、この動作は「ブラウザの仕様」であって、htmlの仕様ではありません
お礼
ご回答有り難うございます。 あちらでもエクセルのファイルをDLさせたいような 記述があったので、勘違いをしたようですね。 こういう使い方が出来ると分かって芸風が広がりそうです。
- PXU10652
- ベストアンサー率38% (777/1993)
「ひょっとして私のやっていることは仕様的には誤りなのでしょうか?」 そんなことはありません。アンカーで、画像でも動画でもExcelでもプログラムなどの実行ファイルでも、何でも埋め込めます。例えば、MP3ファイルを埋め込めば、「保存」でダウンロードしたり、「実行」で再生させることも出来ます。
お礼
早速のご回答有り難うございます。 こういう芸当が可能なんですね。 私としては宝物を発見したような気分でした。
お礼
ご回答有り難うございます。 やはり先生に叱られてしまいました>< そんな気がしていたので質問してみました。案の定でした。 サーバとブラウザ、両方の組み合わせが重要なのですね。 .htaccessは時々見かけたのですが、 こういう用途があったのですね。 調べて見たところサーバの方でも対応している必要が あるとのことなので、ちょっと聞いてみます。