2012-01-16 28 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