强制链接到mp3文件以下载/另存为

时间:2009-06-18 03:25:13

标签: c# javascript html

我的网站上有mp3文件的链接(普通<a href="file.mp3">标签)。

但对于安装了 Apple Quicktime 的许多用户,当您点击链接时,它会打开mp3文件而不是“保存”。

您是否可以强制浏览器保存链接而不是使用浏览器首选项?

我可以使用JavaScript或C#.NET,如果可能的话,我正在寻找一个简单的解决方案。

6 个答案:

答案 0 :(得分:6)

您需要设置一个http标题,其中“Content-Disposition”设置为“attachment”。这将强制浏览器弹出保存对话框。 873207在C#中有一个干净的方法。

但是,就像Pax所说的那样,默认情况下你可能不应该这样做。一个很好的方法是提供文件的正常链接(你正在这样做的方式),并在它旁边提供强制保存对话框的辅助链接。这样你就可以让“不太有天赋”的用户进行简单的点击保存操作,并让其他所有用户通过mp3做他们想做的任何事情。

答案 1 :(得分: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>

当用户单击/左键单击下载链接时,会强制“另存为”框。

答案 2 :(得分:3)

只需在页面中添加Content-Disposition标题即可!

这是一个简单的.htaccess规则:

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

这样做的缺点是,您下载的文件在“另存为”对话框中将具有相同的名称。这可能没有文件名部分,但我还没有测试过。 (虽然我没有测试其余部分......; P)

编辑另外,如果您有可用的服务器端脚本,则可以使用它来获取文件的名称并设置Content-Disposition标头。

答案 3 :(得分:1)

它适用于许多浏览器,但不适用于Safari或IE:使用HTML5的下载属性

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

答案 4 :(得分:0)

我认为你不能轻易做到这一点。此外,你不应该这样做。该机器属于用户,如果他们喜欢流式传输MP3而不是下载它,那就是他们的决定。

我自己的解决方案是提供一个链接让人们抱怨他们是流式而非下载的(好吧,抱怨任何,真的)并让社区(包括你自己)提供解决方案

然后,如果有人声称它似乎总是玩而不是下载,你可以与他们一起弄清楚他们正在使用Firefox和QuickTime并告诉他们他们可以右键单击 - 另存为或重新配置Firefox。

我会说成为您实现此目的的方式,例如更改发送的MIME类型或文件名,但我的评论是应该在用户站。无论如何,确定的用户可以非常轻松地重新配置他们的浏览器以流式传输您决定使用的任何MIME类型,因此您仍然无法保证它。

答案 5 :(得分:0)

绝对强制它是不可能的,但您可以尝试将该行添加到您的apache配置中:

AddType application/random-fake-type .mp3

据我了解,IE查看请求并尝试猜测MIME类型,因此上述解决方法不会真正起作用。你也可以编写一个脚本来处理这个问题,就像这个类似的php script.

一样