【问题标题】:Missing file extension on download from header从标题下载时缺少文件扩展名
【发布时间】:2013-04-14 20:55:23
【问题描述】:

我正在使用下面的代码下载一个文件,它运行良好,但问题是文件扩展名丢失,即使在压力下载之后也是如此。我已尝试将其更改为其他 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 数组中的值没问题。

【问题讨论】:

    标签: php apache .htaccess http-headers


    【解决方案1】:

    这里只是在黑暗中拍摄,文件名中有空格吗?在这种情况下,您可以尝试在文件名周围添加双引号,有关于省略空格后部分的报告(例如:http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download

    编辑:正如 cmets 中所讨论的,标头没有返回扩展名,因此在后端手动添加 .mp3 扩展名可以解决此问题。

    【讨论】:

    • 整个名称已加载,带有空格,例如“my new mix”缺少“.mp3”。出于好奇,扩展名来自哪里,是来自mime类型还是来自实际文件名,Apache设置可以阻止它吗?
    • 我不完全明白你的意思,但你可以尝试通过使用带有 Firbug 插件的 Firefox 来检查“客户端”接收到的内容。只需打开 Firebug 并检查返回的内容标题(按 F12 打开 Firebug 并检查“网络”选项卡)-> dl.dropboxusercontent.com/u/11837707/stackoverflow/headers.jpg
    • 这就是我得到的,我正在从我的数据库中下载一个 id 为 19 的文件,这是第二个请求,它会下载文件名“enth nd...” dropbox.com/s/bpz1wx9gfl96sih/file%20type.png
    • 你能点击'19'文件并点击标签页'headers'吗?我对响应头特别感兴趣(它们在底部)。
    • 这可能是因为如果您删除“Content-Disposition: attachment”标头,浏览器会将其识别为“Content-Type”标头中指定的 MP3。因此,我只需将 .mp3 添加到扩展名中,您就可以开始新的冒险了 ;)
    【解决方案2】:

    您可以尝试在文件名周围添加转义引号,如下所示:

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

    【讨论】:

      【解决方案3】:

      Patrick 答案的升技修改

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-10
        • 2020-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多