2009-06-18 1 views
2

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

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

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

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

ответ

6

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

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

+0

+1 Для решения 2-ссылок. Я бы добавил, что есть определенные сценарии, в которых требуется принудительная загрузка (например, экспорт отчета), но я признаю, что они, похоже, не применяются здесь. – Basic

0

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

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

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

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

0

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

AddType application/random-fake-type .mp3 

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

3

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

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

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

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

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

4

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

Сохранить как 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> 

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

1

Он работает со многими браузерами, но не Safari или IE: с помощью атрибута скачать с HTML5

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

Смежные вопросы