2013-06-24 35 views
7

我有一個鏈接指向我的網站上的音樂文件,現在文件的名稱在上傳時被哈希,所以我想使用原來的文件名,我已經存儲在我的數據庫中,我做了一些研究,發現了'a'標籤的這個新的「下載」屬性,但只適用於Firefox的更高版本和Chrome,它不適用於ie,也不適用於我使用的下載管理器所以我在網上查了一下,發現了關於我然後實施的標題。現在我將文件名改爲好了,但是無論我嘗試下載的音樂文件如何,音樂文件都會保存爲'.35kb'文件大小。這是我的代碼:在PHP中使用頭文件重命名下載文件

if (isset($_REQUEST['download'])) 
    { 
     $download_id = $_REQUEST['download']; 

     $db = new MysqliDatabase(ConnectionString); 
     $result = array(); 
     $result = $db->query_one("SELECT TrackID, ma.ArtisteName, FeaturedArtistes, 
            mc.Category, TrackName 
            FROM `musictracks` mt 

            LEFT JOIN `musiccategories` mc 
            ON mt.CategoryID = mc.CategoryID 

            LEFT JOIN `musicartistes` ma 
            ON mt.ArtisteID = ma.ArtisteID 

            WHERE mt.TrackID = '$download_id';"); 

     $filename = $result->TrackPath; 
     $outputfilename = $result->ArtisteName . ' ft. ' . $result->FeaturedArtistes . ' - ' . $result->TrackName . '.mp3'; 

     header("Content-Type: audio/mpeg"); 
     header("Content-Disposition: attachment; filename=\"" . basename($outputfilename) . "\";"); 
     header("Content-Transfer-Encoding: binary"); 
     readfile("$filename"); 
    } 

這是下載鏈接:

<a href="<?php echo 'musicdownload.php?download='. $row->TrackID ?>" ><img src="images/download.png" alt="download" title="download" width="14" height="14" /></a> 
+0

11.35kb文件包含什麼? –

+0

把一些mp3文件放在服務器上,並嘗試直接下載 - 也許有服務器的問題。並檢查你的'$文件名' - 也許這不是你所期望的。 – furas

+0

它被保存爲音樂文件,但當我嘗試播放它不起作用。 –

回答

4

我的PHP是一個有點生疏,但我可以用你的代碼,沒有內容長度標題想到的一兩件事。更新您的代碼,這一點,看看是否能工程:

if (isset($_REQUEST['download'])) { 
    { 
    $download_id = $_REQUEST['download']; 

    // ... 

    $filename = $result->TrackPath; 
    $outputfilename = $result->ArtisteName . ' ft. ' . $result->FeaturedArtistes . ' - ' . $result->TrackName . '.mp3'; 

    if (file_exists($filename)) { 
     header("Content-Type: audio/mpeg"); 
     header("Content-Disposition: attachment; filename=\"" . basename($outputfilename) . "\";"); 
     header("Content-Transfer-Encoding: binary"); 

     header('Content-Length: ' . filesize($filename)); 
     ob_clean(); 
     flush(); 
     readfile($filename); 
     exit; 
    } 
    } 
} 

注意,我們使用flush();到頭部發送到瀏覽器,我們開始下載實際的文件之前。並且我還添加了一個if (file_exists($filename))以確保我們有要發送的文件。我建議你把else子句有給你的東西,會告訴你,如果你沒有一個文件中像你期望......

+0

很好。效果很好。代碼很乾淨。 –

0

header("Content-Type: application/force-download"); header("Content-Type:audio/mpeg"); header("Content-Type: application/download");; header("Content-Disposition: attachment;filename=".$file_name);

0

請下載MP3文件使用curl

下面是示例代碼,供大家參考

<?php 

if(isset($_REQUEST['inputurl']) && $_REQUEST['inputurl']!="") { 

$file = $_REQUEST['inputurl']; 

header("Content-type: application/x-file-to-save"); 
header("Content-Disposition: attachment; filename=".basename($file)); 
readfile($file); 

} 

?> 

<form name="from" method="post" action=""> 
<input name="inputurl" type="text" id="inputurl" value="" /> 
<input type="submit" name="Button1" value="Get File" id="Button1" /> 
</form> 

可能是它會幫助你。