2013-06-24 88 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> 

可能是它会帮助你。