在PHP中使用Header重命名下载文件
我有一个链接指向我的网站上的音乐文件,现在该文件的名称在上传时被哈希,所以我想使用原来的文件名,我已经存储在我的数据库中,我做了一些研究,发现这个新的'为'a'标签下载'属性,但只适用于更高版本的Firefox和Chrome,它不能在ie中工作,也不能与下载管理器一起使用,所以我在网上查了一下,发现了关于标题然后我执行。 现在我将文件名改为好了,但是无论我尝试下载的音乐文件如何,音乐文件都会保存为'.35kb'文件大小。 这是我的代码:
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>
我的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子句给你一些东西,如果你没有像你期望的那样的文件,会显示给你...
header("Content-Type: application/force-download");
header("Content-Type:audio/mpeg");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=".$file_name);
请用curl下载你的mp3文件
以下是供您参考的示例代码
<?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>
可能会帮助你。
链接地址: http://www.djcxy.com/p/72231.html