2013-04-14 77 views
2

我使用下面的代码来下载文件,该工作很好,但问题在于文件扩展名缺失,即使在压力下载之后。我曾尝试将其更改为其他MIME类型,可能是什么问题以及我如何解决它?从头文件下载时缺少文件扩展名

header('Content-Type: audio/mp3'); 
header("Content-Disposition: attachment; filename=$row[3]"); 
header("Content-Length: ".filesize("$row[1]$row[2]")); 
$fp = fopen("$row[1]$row[2]", "r"); 
fpassthru($fp); 
fclose($fp); 

注意:$ row数组中的值很好。

回答

2

在这里黑暗只是一个镜头,这可能是因为文件名中有一个空间?在这种情况下,您可以尝试在文件名周围添加双引号,有关空白被省略后的部分的报告(例如:http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download

编辑:如注释中所述,标题未返回扩展名,因此在后端手动添加.mp3扩展可解决此问题。

+0

整个名称被加载,用空格例如:“我的新组合”缺少” .MP3" 。只是出于好奇,在什么地方扩展名来自MIME类型还是来自实际文件名,并且可以通过Apache设置阻止它? –

+0

我不完全知道你的意思,但是你可以尝试检查'client'使用的是什么使用Firbug插件的Firefox。打开Firebug并检查返回的内容标题(点击F12打开Firebug并检查'Net'标签) - > https://dl.dropboxusercontent.com/u/11837707/stackoverflow/headers。 jpg – Toverbal

+0

好吧,这是什么我得到了,我从我的数据库中下载了一个ID为19的文件,这是第二个请求,它下载文件名'enth nd ...“https://www.dropbox.com/s/ bpz1wx9gfl96sih/file%20type.png –

0

你可以尝试将周围的文件名这样的转义引号:

header("Content-Disposition: attachment; filename=\"$row[3]\""); 
+0

:(不工作。 –

0
对帕特里克的答案

升技修改

header("Content-Disposition: attachment; filename="."\"{$fname}\"");