mp3 ファイルを含む外部 URL を Web ページでホストしたいと考えています。問題は、そのリンクをクリックするとプレーヤーが開くことです。ファイルをダウンロードするには、右クリックして「リンクを名前を付けて保存」する必要があります。ファイルのダウンロードを強制する解決策はありますか?
ファイルをダウンロードしてから、ヘッダーを使用してダウンロードを強制したくありません。
現在、HTML5 仕様では、ハイパーリンクに非常に便利な属性が定義されています。これにより、基本的に、サーバーからのdownload
着信に関係なく、クライアント側でダウンロード動作を強制できます。Content-Type
Content-Disposition
場合によっては、リソースはすぐに表示するのではなく、後で使用することを目的としています。リソースをすぐに使用するのではなく、後で使用するためにダウンロードすることを意図していることを示すために、そのリソースへの を作成するor要素で
download
属性を指定できます。a
area
hyperlink
<...>
この
download
属性が存在する場合、作成者がハイパーリンクをリソースのダウンロードに使用することを意図していることを示します。属性には値がある場合があります。値がある場合は、作成者がローカル ファイル システムのリソースにラベルを付ける際に使用することを推奨するデフォルトのファイル名を指定します。
したがって、ハイパーリンクに属性を追加するだけで、それをサポートするブラウザーは、コンテンツをダウンロードする必要があることを認識します。
<a href="http://example.com/media.mp3" download>Download Your File</a>
属性値を設定することで、ダウンロードしたファイルに別の名前を提案することもできます:
<a href="http://example.com/media.mp3" download="check this out.mp3">Download Your File</a>
詳細情報とデモ:
ブラウザのサポート: caniuse.com
生成されたコンテンツのダウンロード
Base64 でエンコードされたデータ URI を取得する方法がある限り、生成したコンテンツをダウンロードするリンクを作成することもできます。
<a href="data:application/octet-stream;base64,YOUR_ENCODED_DATA" download="song.mp3">Download</a>
生成されたコンテンツの保存の詳細については、Eli Grey による次の記事を参照してください。
編集: 以下の回答は、外部リンクではなく、ターゲット MP3 ファイルのみを制御できる場合に適用されます。
リンクは MP3 ファイルに直接移動するのではなく、ロジックの一部に移動する必要があります (たとえば、ASPX を使用していますか? その場合、.aspx ページをターゲットとして使用するか、.aspx の HTTP ハンドラーを作成できます。 mp3 拡張子) を使用して、次の行を含む出力に HTTP ヘッダーを追加します。
Content-Disposition: attachment;filename="whatever.mp3";
これにより、ブラウザーは、出力の内容をローカルに保存するファイルとして扱うように指示されます。