Принудительная ссылка на mp3 файл для скачивания / сохранения как - PullRequest
2 голосов
/ 18 июня 2009

У меня есть ссылки на mp3-файлы на моем сайте (обычные <a href="file.mp3"> теги).

Но для многих пользователей, у которых установлено Apple Quicktime , он будет открывать файлы mp3, а не "сохранять" их при нажатии на ссылки.

Можете ли вы заставить браузер сохранять ссылку, а не использовать настройки браузера?

Я могу использовать JavaScript или C # .NET и, если возможно, ищу простое решение.

Ответы [ 6 ]

6 голосов
/ 18 июня 2009

Вам необходимо установить заголовок http с «Content-Disposition», установленным в «attachment». Это заставит браузер открыть диалоговое окно сохранения. 873207 имеет чистый способ сделать это в C #.

НО , как Пакс говорит, что вы, вероятно, не должны делать это по умолчанию. Хороший способ сделать это - предоставить нормальную ссылку на файл (способ, которым вы это делаете), и предоставить дополнительную ссылку рядом с ним, которая вызывает диалог сохранения. Таким образом, вы позволяете «менее одаренным» пользователям выполнять простую операцию «нажми и сохраняй», а также позволяете каждому другому пользователю делать с mp3 все, что он хочет.

4 голосов
/ 03 января 2012

Это довольно устаревший вопрос, и я не уверен, есть ли какие-либо проблемы с такими действиями, но у меня недавно была проблема, и я решил опубликовать то, что я в конечном итоге использовал в качестве решения.

Сохраните это как php-файл (например, downloadmusicfile.php) в той же папке, что и ваша музыка:

<?php
$filename = $_GET['file'];
if (isset($filename))
{
// Prevents access to something that is not in the same directory as this script
if(substr_count($filename,"/") > 0)
{
die('This should not happen.');
};
$len = filesize($filename);
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$len);
readfile($filename);
}
else
{
die('No file specified.');
};
?>

Тогда ссылки на файлы примерно так:

<a href="downloadmusicfile.php?file=song.mp3">Link Name</a>

Это приводит к появлению поля «Сохранить как», когда пользователь нажимает ссылку для скачивания одним или левым щелчком мыши.

3 голосов
/ 18 июня 2009

Просто добавьте заголовок Content-Disposition на свою страницу!

Вот простое правило .htaccess, чтобы сделать это:

<FilesMatch "\.mp3$">
Header set Content-Disposition attachment; filename=downloaded.mp3
</FilesMatch>

Недостатком этого является то, что загруженные файлы будут иметь одинаковые имена в диалоговом окне «сохранить как». Это может работать без части имени файла, но я не проверял это. (Хотя я и остальное не проверял ...; P)

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

1 голос
/ 02 марта 2015

Работает со многими браузерами, но не с Safari или IE: используется атрибут загрузки из HTML5

<a href="/audio/myfile.mp3" download>

0 голосов
/ 18 июня 2009

Абсолютно невозможно принудительно вызвать его, но вы можете попробовать добавить строку в конфигурацию apache:

AddType application/random-fake-type .mp3

Насколько я понимаю, IE просматривает запрос и пытается угадать MIME-тип, поэтому вышеописанный обход не будет работать. Вы также можете написать скрипт для этого, точно так же, как этот php скрипт.

0 голосов
/ 18 июня 2009

Я не думаю, что вы можете сделать это легко. Кроме того, вы не должны делать это. Аппарат принадлежит пользователю, и, если он предпочтет потоковую передачу MP3-файлов, а не загрузит их, это их решение.

Мое собственное решение - предоставить людям ссылку на то, что они передаются в потоковом режиме, а не загружены (ну, на самом деле, жаловаться на что-нибудь , действительно), и позволить сообществу (включая вас) предоставить решения.

Затем, если кто-то заявляет, что он всегда воспроизводится, а не загружается, вы можете поработать с ними, чтобы выяснить, используют ли они Firefox и QuickTime, и сказать им, что они могут либо щелкнуть правой кнопкой мыши, либо сохранить, либо изменить конфигурацию Firefox.

Я скажу, что будет способы, которыми вы можете достичь этого, такие как изменение типа MIME или отправляемого имени файла, но мой комментарий, что это должно быть под контролем пользователя стоит. И в любом случае, определенный пользователь может довольно легко перенастроить свой браузер для потоковой передачи любого типа MIME, который вы решите использовать, поэтому вы все еще не можете гарантировать его.

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