4

HTML では、ブラウザーがダウンロードのみ可能で表示はできないファイルにどのようにリンクしますか? たとえば、zip ファイルmy-program.zipがあるとします。私の Web サイトへの訪問者がリンクをクリックしたときに、そのファイルをダウンロードできるようにしたいと考えています。リンクは次のようになります: download my program . 私の Web サーバーでは、HTML ファイルと zip ファイルは同じディレクトリにあるため、zip ファイルの相対パスは単純にそのファイル名です。

<a href="my-program.zip">しかし、タグ付きのファイルにリンクしただけでは、ブラウザはリンクを認識しませんよね? ブラウザは zip ファイルを開くことができないためです。では、それにリンクする適切な方法は何ですか?

4

1 に答える 1

16

実際、あなたの例ファイルにリンクする適切な方法です:

<a href="my-program.zip">download my program</a>

ブラウザがファイルを表示できないことを確実に判断することはできません。リンクするだけです。表示するか、ダウンロードするか、その他のことを行うかは、ブラウザ次第です。心配しないで; ブラウザは通常、正しいことを行います。

これは、送信したファイルやページをブラウザーがどう処理するかわからないという Web の原則に従います。ZIP ファイルについて言及しましたが、PDF ファイルについて考えてみてください。これらは ZIP ファイルのようなものです。HTML ではなく、ブラウザー用に作成されておらず、ブラウザーがダウンロードする可能性があります。しかし、Adobe PDF ReaderSchubert の PDF Browser Pluginなど、PDF ファイルの内容をブラウザで直接表示するプラグインがあります。同様に、ブラウザ用の ZIP ファイル ビューアが存在する可能性もあります。ブラウザで ZIP ファイルのコンテンツを表示し、それらのコンテンツを抽出する場所をユーザが決定できるようにする場合があります。

ほとんどのブラウザーには、架空の ZIP ファイル ビューアーが記述されていないため、必要に応じてファイルがダウンロードされるだけです。しかし、それは問題ではありません。リンクを書くだけで、すべて問題ありません。

ブラウザーは、ファイルを表示したり、ファイルをすぐにダウンロードしたりする以外のことを行うことができます。また、ファイルをダウンロードするかどうかをユーザーに尋ねることもできます。または、ファイルのダウンロードを開始し、ファイル内のウイルスを検出して、すぐに削除することもできます。要点は、ファイルをどう処理するかはブラウザ次第だということです。

このポリシーは逆であることに注意してください。HTML ページは、ファイルと同じようにブラウザーに表示されます。どちらも「リソース」です。「リソース」は「URL」の「R」です。URL にアクセスして HTML ページにアクセスすると、ブラウザは「これは HTML リソースです。これをどうすればいいですか?ああ、メイン ウィンドウに表示できます。そうします。」これは、URL へのリンクをクリックした後に ZIP ファイルをダウンロードするのと同じプロセスであり、「これは ZIP リソースです。. これをどうすればいいですか?表示できません。ダウンロードを開始し、ダウンロード ウィンドウを開いて、ユーザーが何が起こったかを確認できるようにします。」ほとんどのブラウザーでは、必要に応じて、ファイルのようにページの HTML をダウンロードすることさえできます。

ファイルに複数の形式があり、ブラウザーが表示できる最適なものを選択できるようにする場合は、HTTP Accept ヘッダーを使用してシステムをセットアップできます。たとえば、my-programの ZIP 版と RAR 版の両方を持っている場合、リンクするだけmy-programでブラウザが最適なバージョンを選択するようにすることができます。ただし、そのためのセットアップは複雑になる可能性があり、そのようなシステムは通常、ファイルのダウンロードだけでは必要ありません。通常、Accept ヘッダーは、ブラウザーが表示することを意図したものの正しいバージョンを取得するために使用されます。たとえば、ブラウザーは、埋め込まれた WMV を再生できるコーデックを持っていないため、WMV ビデオ ファイルではなく MP4 ビデオ ファイルを選択する場合があります。ビデオ。


ブラウザ自体でファイルを表示できる可能性がある場合でも、ブラウザに強制的にファイルをダウンロードさせたい場合は、この質問を参照してください。

于 2012-06-28T20:28:38.460 に答える