这是昨晚工作的,但我一定是不小心改变了一些东西,因为现在不是。
从这些标题中应该清楚我想要做的事情:
Content-Disposition: attachment;filename=english_customizable.xml
Location: http://tortoisewrath.com/files/2.xml
但是,当发送此标头时,该Content-Disposition
部分在重定向后不起作用。
...为什么?
这是昨晚工作的,但我一定是不小心改变了一些东西,因为现在不是。
从这些标题中应该清楚我想要做的事情:
Content-Disposition: attachment;filename=english_customizable.xml
Location: http://tortoisewrath.com/files/2.xml
但是,当发送此标头时,该Content-Disposition
部分在重定向后不起作用。
...为什么?
你想要做的是不建议检查这个问题;标题位置 + 内容配置
Content-Disposition + Location 标头
但是您可以做到,要使其正常工作,您必须在发送之前缓冲整个响应。您可以通过输出缓冲来做到这一点
否则浏览器可能会Location
在文件下载之前解释标题。无论哪种方式都是粗略的,所以你不应该这样做。
请注意,强制“另存为”使用Content-Disposition: attachment;
将确保客户端不会去/导航任何地方,因此下面的方法在任何情况下都应该没问题。
在php中流式传输文件
引用一个聪明的人的话:
// To use header() with 'content-type', why don't you use mime_content_type() function rather than checking the type on the basis of extension?
// Example code:
<?php
$file="test.docx";
header("Pragma: public");
header('Content-disposition: attachment; filename='.$file);
header("Content-type: ".mime_content_type($file));
header('Content-Encoding: identity');
ob_clean();
flush();
readfile($file);
?>
// Use $file to map to whichever type of file.
// Note: the mime types should already be defined in apache settings
来源:http ://www.php.net/manual/en/function.header.php#107581
请注意,使用的原始答案Content-Transfer-Encoding
实际上并不存在于 HTTP 中。该来源下方的评论解释了它:http ://www.php.net/manual/en/function.header.php#107044