2012-01-16 21 views
13

我正在努力使我的网站上的mp3通过左键单击下载,而不必右键单击并保存为,所以为了做到这一点,我必须设置Content-Disposition:附件。这是我的第一个网站,所以我对如何实际做到这一点很陌生,但是我在我的html标记中这样做,还是以某种方式设置了我的托管站点?如何实现Content-Disposition:附件?

下面是我的标记看起来像什么的例子。

<div class="download"> 
<a href="MP3/Morgan Page, Sultan & Ned Shepard, and BT feat. Angela McCluskey.mp3" 
<img src="img/dlicon.png"/></a> 
</div> 
+3

这是一个服务器端的操作,无法通过HTML代码来完成的客户。你需要在服务器上有一个脚本作为下载服务器,它就是发布Content-Disposition标题的脚本。 – 2012-01-16 05:09:24

+0

你能提供更多的信息吗?你正在使用哪个Web服务器? – 2012-01-16 05:12:23

+0

我正在使用HostGator.com – 2012-01-16 05:22:47

回答

17

MP3列表的例子:

<a href="download.php?file=testing.mp3">Download MP3</a> 
<a href="download.php?file=testing2.mp3">Download MP3</a> 

的download.php:

<?php 

$file = $_GET['file']; 

header('Content-type: audio/mpeg'); 

header('Content-Disposition: attachment; filename="'.$file.'"'); 

?> 
+4

上面的代码将失败,文件名中含有双引号和非ASCII字符(请参阅RFC 6266)。 – 2012-01-16 08:34:25

+0

@JulianReschke是的,OP应该替换文件名(参见问题,文件名是:Morgan Page,Sultan&Ned Shepard和BT feat。Angela McCluskey.mp3)。我会更新我的答案。 – 2012-01-16 08:37:41

+6

注意:除非您确实需要对mp3进行访问控制,否则最好将服务器配置为使用内容处置标头集来提供这些mp3。使用PHP作为文件服务器会降低速度,特别是对于大文件。 – 2013-10-05 00:28:39

3

正如其他人所说,你不这样做,在HTML和动态的解决方案(例如, ,使用PHP)是矫枉过正。

在你的情况下,我会在Web服务器配置中配置Content-Disposition标头。对于Apache,您可以设置标头based on location,或者具有与某些文件名相匹配的.htaccess文件。

+2

动态解决方案始终在应用程序开发中发生。想象一下,例如,在允许特权内容前处理必须进行身份验证。身份验证检查和文件流通常需要来自相同的请求。 – JoshuaDavid 2014-09-02 16:38:25