gpt4 book ai didi

php - 在 PHP 中使用 header 重命名下载文件

转载 作者:太空狗 更新时间:2023-10-29 14:18:10 30 4
gpt4 key购买 nike

我的网站上有一个指向音乐文件的链接,现在文件名在上传时被散列了,所以我想使用我存储在数据库中的原始文件名,我做了一些研究并找到了'a' 标签的这个新的 'download' 属性,但它只适用于更高版本的 firefox 和 chrome,它在 ie 中不起作用,也不适用于我使用的下载管理器,所以我在线检查并发现了关于我随后实现的 header 。我现在可以更改文件名,但无论我尝试下载什么音乐文件,音乐文件都会继续保存为“11.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 有点生疏,但我可以想到您的代码的一件事,没有内容长度 header 。将您的代码更新为这个,看看是否可行:

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(); 将 header 发送到浏览器。我还添加了 if (file_exists($filename)) 以确保我们有文件要发送。我建议您在此处放置一个 else 子句,以便在您没有预期的文件时向您显示一些信息...

关于php - 在 PHP 中使用 header 重命名下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17275191/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com