Принудительный внешний URL загрузки

Я хочу разместить на своей веб-странице внешний url, содержащий mp3 файл. Проблема в том, что нажатие на эту ссылку откроет плеер, я должен щелкнуть правой кнопкой мыши и "Сохранить ссылку как", чтобы загрузить файл. Есть ли какое-либо решение для принудительного загрузки файла?

Я не хочу загружать файл, а затем использовать заголовки, чтобы принудительно загрузить.

Ответ 1

Теперь спецификация HTML5 определяет очень полезный атрибут download для гиперссылок, который в основном позволяет принудительно загружать поведение на стороне клиента, независимо от того, что входит в Content-Type и Content-Disposition с сервера:

В некоторых случаях ресурсы предназначены для последующего использования, а не для немедленный просмотр. Чтобы указать, что ресурс предназначен для загруженный для использования позже, а не сразу используемый, 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


Загрузка сгенерированного контента

Вы даже можете создать ссылку, которая будет загружать созданный вами контент, если есть способ получить URI с кодировкой базы данных:

<a href="data:application/octet-stream;base64,YOUR_ENCODED_DATA" download="song.mp3">Download</a>

Подробнее о сохранении сгенерированного контента см. в этой статье Эли Грей:

Сохранение сгенерированных файлов на стороне клиента

Ответ 2

РЕДАКТИРОВАТЬ: Ниже приведен ответ, если у вас есть контроль над целевым файлом MP3, а не если это внешняя ссылка

Ссылка не должна переходить непосредственно в файл MP3, а в кусок логики (например, вы используете ASPX? В этом случае вы можете использовать страницу .aspx в качестве цели или вы можете создать обработчик HTTP для расширения .mp3), который добавляет HTTP-заголовок к выводу, который содержит строку:

Content-Disposition: attachment;filename="whatever.mp3";

Это даст указание браузеру обрабатывать содержимое вывода как файл для сохранения локально.