4

我有一个指向媒体文件(如 mp3)的链接,我希望在用户单击它时下载它,而不是仅仅播放文件。我想到的页面只是一个普通的静态 html 页面。

有任何想法吗?

4

7 回答 7

5

为了做到这一点,您需要Content-disposition: attachment; filename=fname.ext在发送文件之前以您喜欢的语言发送带有标题的标题。

在不了解诸如您对服务器配置的语言和控制权等细节的情况下,我无法为您提供更详细的说明。但是,您不能仅使用 html 和 javascript 来做到这一点。

于 2008-12-03T20:49:45.177 回答
3

远是我知道那是不可能的。如果无法设置适当的标题,浏览器将决定如何处理文件,通常是播放,您将不得不要求用户按下,右键单击+另存为。如果您可以访问服务器,则使用 .htacces 在 php 或 apache 中设置标头非常简单

<FilesMatch "\.(?i:mp3)$">
  ForceType 音频/mpeg
  标头集 Content-Disposition 附件
</文件匹配>

或者浏览器不会识别它是 MP3,甚至不会尝试打开它:

<FilesMatch "\.(?i:mp3)$">
  ForceType 应用程序/八位字节流
  标头集 Content-Disposition 附件
</文件匹配>

php头设置见: http: //nl.php.net/header

于 2008-12-03T20:54:08.600 回答
0

同意 smazurov 的观点,尽管内容处置可能会为您完成,但最终您无法控制媒体的呈现方式。这是有问题的标头上的 RFC

于 2008-12-03T20:54:19.833 回答
0

客户端 JavaScript 无法实现这一点(最近的功能是document.execCommand('SaveAs'),它只是保存了整个 html 页面)。

于 2008-12-03T20:54:29.397 回答
0

如果您希望他们被迫从链接下载它,则将download属性添加到链接元素(文件名可选):

<a href="file.mp3" download="Song_Name.mp3">Download</a>

如果您希望用户通过任何方式访问 URL 时都被迫下载文件,那么您就不走运了。仅使用 HTML 和 JS 是不可能的。正如其他人所说,您必须有权访问服务器才能在文件加载到浏览器之前影响文件的标题。

于 2014-12-22T04:36:24.597 回答
0
<a href="linkto.mp3" download>Download MP3 File </a>
于 2014-12-22T04:30:28.890 回答
-1

虽然这不是解决方案,但请将文件扩展名更改为 MP3 以外的任何内容。并且,要求用户在下载后重命名它。

于 2008-12-03T21:01:18.727 回答